明白了。它在我使用静态方法和变量时工作。
public class Metronome {
public static boolean mute = false;
public static boolean playing = false;
private static Timer mainTimer;
private static SoundPool soundPool;
private static int soundID;
public static void loadSound(Context context) {
soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
soundID = soundPool.load(context, R.raw.metronome, 1);
}
public static void play(float pace, boolean isMuted) {
mainTimer = new Timer();
MyTimerTask mainTimerTask = new MyTimerTask();
mainTimer.schedule(mainTimerTask, 0, Math.round(pace * 1000));
mute = isMuted;
playing = true;
}
public static void stop() {
mainTimer.cancel();
mainTimer.purge();
playing = false;
}
static class MyTimerTask extends TimerTask {
@Override
public void run() {
playSound();
}
private void playSound() {
if (!mute) {
soundPool.play(soundID, 1, 1, 1, 0, 1);
}
}
}
}