我需要实现一项需要定期执行短期任务的服务。我已经使用sendmessagedelayed处理程序来实现循环。它有效,但有更好的方法吗?
@Override
public boolean handleMessage(Message arg0) {
//do something
Message msgtx=Message.obtain();
handler.sendMessageDelayed(msgtx, updaterate);
return true;
}
答案 0 :(得分:3)
如果执行任务,比如每X分钟或更长时间,使用处理程序就可以了。如果任务执行之间的延迟较大(数小时左右),我建议使用AlarmManager
:
long now = System.currentTimeMillis();
long interval = XXX;// time in milisecs for the next execution
Intent i = new Intent();
i.setClass(this, YourService.class);
i.setAction("some_action_to_indicate_the_task");
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmMgr.set(AlarmManager.RTC_WAKEUP, now + interval, pi);
答案 1 :(得分:1)
如果您希望在应用程序未运行时运行此任务,请使用AlarmManager。 如果您希望它仅在您的应用程序运行时运行,最好使用处理程序。
Android doc说:
注意:警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行也是如此。对于正常的计时操作(刻度,超时等),使用Handler会更容易,也更有效。