我有计划的计时器正在运行以显示上学延迟。每当学生抵达学校时,会打开一个自定义对话框,显示delay in arrival : 20.0 min
。每半分钟它会增加0.5min
。我的代码 -如何在对话框关闭后停止计划的计时器
public void startTimer(long delay_minutes) {
final long delay = delay_minutes;
delay_countup = (double) delay;
//Start the scheduled time
departuretimer = new Timer();
departuretimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
countup = 0.0 + delay_countup;
Log.d("hi","Values 0" + delay_countup + countup);
mHandler.obtainMessage(1).sendToTarget();
delay_countup = delay_countup + 0.5;
Log.d("hi","Values 1" + delay_countup);
}
}, 0, 30000);
}
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
delay_time.setText(String.valueOf(countup) + "min");
rootView.invalidate();
}
};
的问题是 -
一)计时器背景即使在打开的对话框新抵达的学生老学生抵达运行。我的意思是,当对话框关闭时,定时器永远不会被终止(对话框关闭只是为了确认学生的到来)
b)有时textview delay_time
显示错误的值。它显示22.0min
并立即显示0.5min
,然后再显示23.0min
。
这是为什么?
编辑1: 处理timer cancel
点击按钮后,在弹出的对话框
private void handleClickAction() {
dismiss();
timer.cancel();
timer = null;
}
编辑2: 日志总是显示正确的价值观,但在UI中有时出现了问题。问题是,例如 -
delay_countup = 50.0
countup = 50.0
Textview updates as 50.0 //This is correct
Now,
delay_countup = 50.5
countup = 50.5
Textview updates as 0.5 //This is incorrect. I need 50.5
这有时会发生......
确定我只有1个定时器,定的定时器,我把在函数startUpCounting(),如上所示。目前我做的是,当调用dismiss()时,我给出的下一行timer.cancel()仍然不起作用 – Mark023
被调用的方法是什么?你能包含更多的代码吗?将它也设置为null。 – bradkratky
此方法在倒计时器的onFinish()中仅被调用一次,并且我也将计时器设置为null。仍然无法正常工作..查看我更新的问题 – Mark023