Skip to content

Latest commit

 

History

History
42 lines (35 loc) · 1.47 KB

创建定时任务.md

File metadata and controls

42 lines (35 loc) · 1.47 KB

Android中的定时任务有两种实现方式:

  1. 一种是使用Java API里提供的Timer类;
  • 不太适用于那些需要长期在后台运行的定时任务。
  1. 一种是使用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()方法。