#java #android
#java #Android
Вопрос:
Я создавал небольшое приложение для темной комнаты с таймером, изучая Android и Java.
В итоге я использовал CountDownTimer, поскольку он выполняет большую часть работы за меня. :{)
Однако я столкнулся с тем, что выглядит как ошибка в классе.
Моя первоначальная структура использовала обратный вызов OnTick () для уменьшения моего счетчика времени и обновления отображения оставшегося времени. Если я настрою это, например:
new CountDownTimer(60000, 100) {
public void onTick(long millisUntilFinished) {
mDisplayTime.setText(String.valueOf(millisUntilFinished)/1000);
timeTenths -= 1;
updateDisplay();
}
public void onFinish() {
// mDisplayTime.setText("Done!");
}
}.start();
Общий тайм-аут (60 секунд) находится на месте, в пределах половины секунды по моему секундомеру.
Однако отображаемый счетчик останавливается на 3,0 секундах на часах.
Экспериментируя с этим, я обнаружил постоянную «нехватку» 5% в событиях OnTick ().
Я мог бы изменить второй параметр на 950 миллисекунд, но это ужасная ошибка…
В конце концов, я изменил OnTick (), чтобы отобразить фактический millisUntilFinished, что нормально, и также устраняет мой счетчик.
Это известная проблема с CountDownTimer ()?
Дэйв
Ответ №1:
Перед вызовом Google вы выполнили проверку с помощью LogCat? А именно, в вашем onTick
методе вы можете захотеть отладить то, что millisUntilFinish
приносит вам, а не полагаться только на TextView. Кроме того, если я что-то не понял неправильно, вам, возможно, придется рассмотреть onFinish()
вашу окончательную «галочку».
Комментарии:
1. Демонстрируя мое невежество новичка, что такое LogCat? Хорошая мысль о том, что последний тик является onFinish() , но в моем примере он должен тикать 600 раз (я неправильно скопировал его как 60000/1000), и регулярно появляется 30 коротких.
2. Я действительно не стал бы полагаться
onTick
на то, что в этом случае меня вызовут ровно 600 раз. Что вам следует сделать, так это проверить, насколько точен его интервал. Как только вы получите,onTick
сохранитеmillisUntilFinished
и при следующем вызове вычтите новый миллисекундный результат из предыдущего, чтобы увидеть, насколько он «близок» к 100 мс. И LogCat значительно упрощает выполнение такого рода проверки.