- 一种是使用Java API里提供的Timer类;
- 不太适用于那些需要长期在后台运行的定时任务。
- 一种是使用Android的Alarm机制。
- 具有唤醒CPU的功能。
实现一个长时间在后台定时运行的服务:
首先新建一个普通的服务,起名叫LongRunningService,然后将触发定时任务的代码写到onStartCommand()方法中,如下所示:
public class LongRunningService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public int onStartCommand(Intent intent,int flags,int startId){
new Thread(new Runnable() {
@Override
public void run() {
//在这里执行具体的逻辑操作
}
}).start();
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
int anHour = 60*60*1000;//这是一小时的毫秒数
long triggerAtTime = SystemClock.elapsedRealtime()+anHour;
Intent i = new Intent(this,LongRunningService.class);
PendingIntent pi = PendingIntent.getService(this,0,i,0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);
return super.onStartCommand(intent,flags,startId);
}
}
最后,只需要在你想要启动定时服务的时候调用如下代码即可:
Intent intent = new Intent(context, LongRunningService.class);
context.startService(intent);
- 注意:从Android4.4系统开始,Alarm任务的触发时间将会变得不准确。如果你要求Alarm任务的执行时间必须准确无误,可以使用AlarmManager的setExact()方法来替代set()方法。