从处理程序中删除runnable

时间:2016-05-06 11:02:03

标签: java android multithreading android-studio timer

我创建了一个线程,在一段时间之后使用Handler来更新时间我希望在时间结束时通过使用handler.removeCallbacks(runnable)从处理程序中删除它来停止它。所以我在线程内部使用一个布尔标志来阻止它。

问题:时间结束时间值开始变为负值,但线程未停止。我在日志中看到handler.removeCallbacks(runnable)也被调用了。

我在这里失踪了。

private Handler handler = new Handler();
Runnable runnable = new Runnable() {
    public void run() {
        time.setText(
            String.format(
                "%d:%d",
                TimeUnit.MILLISECONDS.toMinutes(AppController.RunningTime),
                TimeUnit.MILLISECONDS.toSeconds(AppController.RunningTime) -
                TimeUnit.MINUTES.toSeconds(
                    TimeUnit.MILLISECONDS.toMinutes(AppController.RunningTime)
                )
            )
        );
        AppController.RunningTime = AppController.RunningTime - 10000;
        if (AppController.RunningTime <= 0) {
            // inform user about your time is finished.
            handler.removeCallbacks(runnable);
            openTimeUpDailog(mContext);
        }
        handler.postDelayed(this, 1000);
    }
};
runnable.run();

1 个答案:

答案 0 :(得分:0)

更新发现问题

它已停止,但又开始计数,因为仍然会调用 handler.postDelayed(this,1000)

这将解决问题。

// in MainController
public void setModel(Model model) {
    this.model = model;
    this.fileList.setModel(model);
}