我尝试开发一个简单的定时器蜂鸣器,每小时一次。对于时间我使用服务和处理程序,这里的例子是:
void onStart(...){
handler.postDelayed(timerRunnable, ONE_HOUR);
}
private Runnable timerRunnable = new Runnable() {
@Override
public void run() {
...beep
handler.postDelayed(timerRunnable, ONE_HOUR);
}
};
但 run()方法将被触发不确定,我认为它取决于当前设备的使用情况。
我尝试使用TimerTask和'manualy'线程实现相同的场景,但具有相同的非确定性结果。
答案 0 :(得分:4)
使用AlarmManager
进行如此长时间的延迟,你可能会有更好的运气。当你的应用程序在前台时,Handler
最适合刻度和超时。
http://developer.android.com/reference/android/app/AlarmManager.html
答案 1 :(得分:0)
Android不是实时操作系统。所有postDelayed()
保证是它至少是指定的毫秒数。除此之外,主要取决于主应用程序线程正在做什么(如果你要绑定它,它不能处理Runnable
),其次取决于设备上还有什么(服务以后台优先级运行,因此比前台获得更少的CPU时间。