我有計劃的計時器正在運行以顯示上學延遲。每當學生抵達學校時,會打開一個自定義對話框,顯示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