У меня есть запланированный таймер, чтобы показать задержку прихода в школу. Всякий раз, когда учащийся приходит в школу, открывается специальное диалоговое окно с отображением 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();
}
};
Проблемы -
а) таймер работает в фоновом режиме для старого прибывшего студента, даже если диалог открыт для нового прибывшего студента. Я имею в виду, что таймер никогда не убивается при закрытии диалога. (Диалог закрывается только для подтверждения прихода ученика)
б) Иногда текстовое представление delay_time
отображает неправильное значение. Показывает 22.0min
и сразу 0.5min
и потом снова 23.0min
.
Почему это?
EDIT 1: обработка timer cancel
после нажатия кнопки в диалоговом окне
private void handleClickAction() {
dismiss();
timer.cancel();
timer = null;
}
EDIT 2: журналы всегда отображают правильные значения, но в пользовательском интерфейсе иногда возникают проблемы. Проблема в том, что например -
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
Это бывает иногда...