Ich habe einen geplanten Timer ausgeführt, um die Verzögerung bei der Ankunft in der Schule anzuzeigen. Immer wenn ein Schüler in die Schule kommt, öffnet sich ein benutzerdefinierter Dialog mit der Anzeige delay in arrival : 20.0 min
. Es wird jede halbe Minute um 0.5min
erhöht. Mein Code ist -So stoppen Sie den geplanten Timer, nachdem der Dialog geschlossen wurde
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();
}
};
Die Probleme sind -
a) der Timer läuft im Hintergrund für die alten angekommen Schüler, auch wenn der Dialog für neue angekommen Schüler geöffnet. Ich meine, der Timer wird nie beendet, wenn der Dialog geschlossen wird. (Der Dialog wird nur geschlossen, um die Ankunft des Schülers zu bestätigen.)
b) Manchmal zeigt die Textansicht delay_time
einen falschen Wert an. Es zeigt 22.0min
und sofort 0.5min
und dann wieder 23.0min
.
Warum ist das?
EDIT 1: timer cancel
nach Klicken Sie im Dialog
private void handleClickAction() {
dismiss();
timer.cancel();
timer = null;
}
EDIT 2: Die Protokolle zeigen immer korrekte Werte aber in der Benutzeroberfläche manchmal gibt es ein Problem. Das Problem ist, dass zum Beispiel -
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
Dies geschieht manchmal ...
Ok Ich habe nur 1 Timer und es ist Timer geplant, die ich in der Funktion startUpCounting() wie oben gezeigt setzen. Derzeit, was ich getan habe, war, wenn entlassen() aufgerufen wurde, die nächste Zeile, die ich timer.cancel() gebe aber immer noch nicht funktioniert – Mark023
Wird die Methode aufgerufen? Können Sie mehr Code hinzufügen? Setzen Sie es ebenfalls auf null. – bradkratky
Diese Methode wird nur einmal in onFinish() des Countdown-Timers aufgerufen und ich setze den Timer ebenfalls auf null. Immer noch nicht funktioniert..Siehe meine aktualisierte Frage – Mark023