Страницы

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

пятница, 13 марта 2020 г.

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

#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, который делает в принципе тоже самое, но "из коробки".

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

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