私はスケジュールされたタイマーを実行して、学校に来るのを遅らせるようにしています。生徒が学校に到着するたびに、カスタムダイアログが開き、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();
}
};
問題がある -
a)のタイマーはダイアログが新たに到着した学生のために開かれている場合でも、古い到着した学生のためにバックグラウンドで実行されます。ダイアログが閉じたときにタイマーが決して殺されないことを意味します(ダイアログは学生の到着を確認するためにのみ閉じます)
b)テキストビューdelay_time
が間違った値を表示することがあります。 22.0min
とすぐに0.5min
と表示され、次に23.0min
と表示されます。
これはなぜですか?
EDIT 1:ダイアログ
private void handleClickAction() {
dismiss();
timer.cancel();
timer = null;
}
EDIT 2でのボタンのクリック後timer cancel
の取り扱い : ログは常に正しい値を表示するが、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
これは時々起こる
私は上記のようにstartUpCounting()関数に入れたタイマーを1つしか持っていません。現在、私がしたのは、dismiss()が呼び出されたとき、次の行にtimer.cancel()を渡しても、まだ動作しませんでした。 – Mark023
メソッドが呼び出されていますか?より多くのコードを含めることができますか?それもnullに設定します。 – bradkratky
このメソッドはカウントダウンタイマーのonFinish()で一度だけ呼び出されていますが、タイマーもnullに設定されています。まだ動作していません。更新された質問を表示します。 – Mark023