开发者

Handler postDelayed delayed longer as configured

I try to develop a simple timer beeper, that peep hourly. For the timing I use a Service and handler, here the exampl开发者_如何学运维e:

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

    private Runnable timerRunnable = new Runnable() {

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

but run() method will be fired nondeterministic, I think it is dependent from the current device usage.

I have try the same scenario with TimerTask and with 'manualy' Thread implementation, but with the same nondeterministic result.


You'll probably have better luck using the AlarmManager for such a long delay. Handler is best for ticks and timeouts while your app is in the foreground.

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


Android is not a real-time operating system. All postDelayed() guarantees is that it will be at least the number of milliseconds specified. Beyond that will be dependent primarily on what the main application thread is doing (if you are tying it up, it cannot process the Runnable), and secondarily on what else is going on the device (services run with background priority and therefore get less CPU time than does the foreground).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜