我创建了一个线程,在一段时间之后使用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();
答案 0 :(得分:0)
更新发现问题
它已停止,但又开始计数,因为仍然会调用 handler.postDelayed(this,1000)。
这将解决问题。
// in MainController
public void setModel(Model model) {
this.model = model;
this.fileList.setModel(model);
}