Страницы

Поиск по вопросам

суббота, 1 июня 2019 г.

Секундомер на Android

Добрый день. Возобновил изучение платформы android. Возник такой вопрос. Есть два куска кода, вот собственно первый:
public void runTimer(){ final Handler handler = new Handler(); final TextView timerView = (TextView)findViewById(R.id.time_view);
handler.postDelayed(new Runnable(){
@Override public void run() { int hours = seconds%3600; int minutes = (seconds%3600)%60; int secs = seconds%60; String time = String.format("%d:%02d:%02d",hours,minutes,secs); timerView.setText(time); if(isStarting){ seconds++; } }
}, 1000);
}
а вот второй:
public void runTimer(){ final TextView timerView = (TextView)findViewById(R.id.time_view); final Handler handler = new Handler(); handler.post(new Runnable(){ public void run(){ int hours = seconds%3600; int minutes = (seconds%3600)%60; int secs = seconds%60; String time = String.format("%d:%02d:%02d",hours,minutes,secs); timerView.setText(time); if(isStarting){ seconds++; } handler.postDelayed(this, 1000); } }); }
Проблема в том что они должны, как я понимаю, работать одинаково, но работает только пример под номером 2. Кто знает почему так?


Ответ

1 фрагмент кода вызывается ровно 1 раз. Он вызывается через 1 секунду с помощью handler.postDelayed(..., 1000) , отрабатывает и всё.
2 фрагмент кода вызывается сразу методом handler.post и в конце своей работы вызывает handler.postDelayed(this, 1000); т.е. вызывает сам себе через 1 секунду.
А в целом рекомендую ещё посмотреть на класс CountDownTimer, который делает в принципе тоже самое, но "из коробки".

Комментариев нет:

Отправить комментарий