问题描述
我试图制作一个可以停止并重播Timer的切换按钮,在我添加了一个名为“ Set_BPM”的新方法之前,它的工作情况还不错。 它会启动并正确停止,当我停止后再次尝试将其崩溃时。
这是我使用计时器的课程:
public class Metronome {
int miliseconds;
Timer timer = new Timer();
public Metronome () { }
public void Set_BPM (int bpm) {
miliseconds = (60000 / bpm);
}
public void Start (final Context context) {
TimerTask timerTask = new TimerTask () {
@Override
public void run() {
Sonidos.Tick(context);
}
};
timer.schedule(timerTask,1000,miliseconds);
}
public void Stop () {
timer.cancel();
timer.purge();
}
}
这就是我的称呼方式:
public void Encender_Metronomo (View view) {
if (tb_metronome.isChecked()) {
metronome.Set_BPM(Integer.parseInt(et_bpm.getText().toString()));
metronome.Start(this);
}
else
metronome.Stop();
Sonidos.Button(this);
}
我的活动上方还有一个对象:
private Metronome metronome = new Metronome();
解决方法
一旦cancel()
和Timer
,您将无法再安排更多任务。引用the documentation:
一旦计时器终止,其执行线程就会正常终止,并且无法在其上安排更多任务。