Я пишу приложение секундомера для BlackBerry (которое похоже на встроенный в BlackBerry StopWatch). Имеется метка таймера, отображающая текущее время в формате MM: SS: T (минуты, секунды, десятые доли секунды). Метка обновляется каждые 100 миллисекунд с помощью TimerTask.
Приложение работает хорошо, и время отображается правильно, однако, есть моменты, когда метка таймера не обновляется с заданным интервалом (каждые 100 миллисекунд). Метка таймера приостанавливает (не считая) некоторое время и продолжает считать (пока все еще правильно отображает время)
Я думаю, что TimerTask не выполняется для обновления метки таймера во время этой паузы. Знаете ли вы, почему приложение действует так и как это исправить?
Ниже приведена ветка для обновления метки таймера:
public class ThreadUpdateTime extends Thread
{
private MyMainScreen myMainScreen;
private Timer updateTimerLabelTimer = new Timer();
public ThreadUpdateTime(MyMainScreen parent)
{
myMainScreen=parent;
}
public void run()
{
try {
updateTimerLabelTimer.schedule(new RecordTimer(myMainScreen), TIMER_DELAY, TIMER_INTERVAL);
} catch (Exception e) {
//put alert here
}
}
public void iStop()
{
updateTimerLabelTimer.cancel();
}
}
Задача таймера:
public class RecordTimer extends TimerTask
{
private MyMainScreen myMainScreen;
public RecordTimer(MyMainScreen parent)
{
myMainScreen=parent;
}
public void run()
{
myMainScreen.iUpdateTimerLabel();
}
}
и метод iUpdateTimerLabel:
public void iUpdateTimerLabel()
{
//calculate : sign, sMin, sSec, sTenth
synchronized(Application.getEventLock())
{
lblSpotTime.setText(sign+sMin+":"+sSec+"."+sTenth+" ");
}
}