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