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).
精彩评论