Добрый день. Возобновил изучение платформы 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, который делает в принципе тоже самое, но "из коробки".
Комментариев нет:
Отправить комментарий