为什么计时器停止时我的计时器崩溃?

问题描述

我试图制作一个可以停止并重播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();

This is what Logcat says

解决方法

一旦cancel()Timer,您将无法再安排更多任务。引用the documentation

一旦计时器终止,其执行线程就会正常终止,并且无法在其上安排更多任务。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...