实现循环

时间:2011-03-09 05:11:36

标签: android handler

我需要实现一项需要定期执行短期任务的服务。我已经使用sendmessagedelayed处理程序来实现循环。它有效,但有更好的方法吗?

@Override
    public boolean handleMessage(Message arg0) {
         //do something
         Message msgtx=Message.obtain();
         handler.sendMessageDelayed(msgtx, updaterate);
         return true;
    } 

2 个答案:

答案 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会更容易,也更有效。