Обработчик postDelayed задерживается дольше, как настроено - PullRequest
1 голос
/ 29 апреля 2011

Я пытаюсь разработать простой таймер, который ежечасно выглядывает. Для определения времени я использую Сервис и обработчик, вот пример:

    void onStart(...){
        handler.postDelayed(timerRunnable, ONE_HOUR);
    }

    private Runnable timerRunnable = new Runnable() {

    @Override
        public void run() {
               ...beep
               handler.postDelayed(timerRunnable, ONE_HOUR);
        }
    };

но run () метод будет запущен недетерминированным, я думаю, что это зависит от текущего использования устройства.

Я пробовал тот же сценарий с TimerTask и с «ручной» реализацией Thread, но с тем же недетерминированным результатом.

Ответы [ 2 ]

4 голосов
/ 29 апреля 2011

Вам, вероятно, повезет больше, если использовать AlarmManager для такой длительной задержки. Handler лучше всего подходит для тиков и таймаутов, когда ваше приложение находится на переднем плане.

http://developer.android.com/reference/android/app/AlarmManager.html

0 голосов
/ 29 апреля 2011

Android не является операционной системой реального времени.Все postDelayed() гарантирует, что это будет как минимум указанное количество миллисекунд.Кроме того, это будет зависеть в первую очередь от того, что делает основной поток приложения (если вы связываете его, он не может обработать Runnable), а во вторую очередь от того, что еще происходит на устройстве (службы запускаются с фоновым приоритетом и поэтому получаютменьше процессорного времени, чем на переднем плане).

...