Я пытаюсь написать приложение для ежевики, которое по сути является секундомером и отображает время прохождения круга. Во-первых, я не уверен, что реализую функциональность секундомера наиболее оптимальным способом. У меня есть LabelField (_myLabel), который отображает «часы» - начиная с 00:00. Затем вы нажимаете кнопку «Пуск», и каждую секунду поле _myLabel обновляется с учетом того, сколько секунд прошло с момента последнего обновления (должно увеличиваться только на 1, но иногда возникает задержка, и она пропускает число). Я просто не могу придумать другой способ сделать это - и я новичок в разработке GUI и потоков, поэтому я думаю, именно поэтому.
РЕДАКТИРОВАТЬ: Вот что вызывает секундомер:
_timer = new Timer();
_timer.schedule(new MyTimerTask(), 250, 250);
А вот и TimerTask:
class MyTimerTask extends TimerTask {
long currentTime;
long startTime = System.currentTimeMillis();
public void run() {
synchronized (Application.getEventLock()) {
currentTime = System.currentTimeMillis();
long diff = currentTime - startTime;
long min = diff / 60000;
long sec = (diff % 60000) / 1000;
String minStr = new Long(min).toString();
String secStr = new Long(sec).toString();
if (min < 10)
minStr = "0" + minStr;
if (sec < 10)
secStr = "0" + secStr;
_myLabel.setText(minStr + ":" + secStr);
timerDisplay.deleteAll();
timerDisplay.add(_timerLabel);
}
}
}
В любом случае, когда вы останавливаете секундомер, он обновляет историческую таблицу данных времени круга. Когда этот список становится длинным, таймер начинает ухудшаться. Если вы попытаетесь прокрутить, то это будет очень плохо.
Есть ли лучший способ реализовать мой секундомер?