首页 > 解决方案 > 为什么我的计时器在我停止时会导致我的 android 活动崩溃?

问题描述

我正在尝试制作一个可以停止和重播计时器的切换按钮,它工作得很好,直到我添加了一个名为“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();

这就是 Logcat 所说的

标签: javaandroidtimertimertask

解决方案


一旦你cancel()a Timer,你不能用它来安排更多的任务。引用文档

一旦定时器被终止,它的执行线程就会优雅地终止,并且不能在其上安排更多的任务。


推荐阅读