JobScheduler

JobScheduler简介

JobScheduler在api 21被引入,作为一个系统服务,它可以用于统一的调度任务,可以未来某个时间下满足一定条件时触发执行,在app线程执行相应任务,JobScheduler不能直接初始化,而应该通过

Context.getSystemService(Context.JOB_SCHEDULER_SERVICE)方法获取

使用流程

1.编写类继承于JobService

public class MyJobService extends JobService {
    private static final String LOG_TAG = "MyJobService";

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(LOG_TAG, "MyJobService created");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(LOG_TAG, "MyJobService destroyed");
    }

    @Override
    public boolean onStartJob(JobParameters params) {
    Log.i(LOG_TAG, "onStartJob");
//do something
     return false;
     }


  @Override
    public boolean onStopJob(JobParameters params) {
        Log.i(LOG_TAG, "Whelp, something changed, so I'm calling it on job " + params.getJobId());
        return false;
    }

2.初始化ComponentName ; JobScheduler

ComponentName serviceComponent = new ComponentName(this,MyJobService.class);
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);

3.初始化JobInfo

JobInfo jobInfo = new JobInfo.Builder(i,serviceComponent)
                  .setMinimumLatency(5000)//5秒 最小延时、
                  .setOverrideDeadline(60000)//maximum最多执行时间
//                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)//免费的网络---wifi 蓝牙 USB
                  .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)//任意网络---
          /**
           设置重试/退避策略,当一个任务调度失败的时候执行什么样的测量采取重试。
           initialBackoffMillis:第一次尝试重试的等待时间间隔ms
           *backoffPolicy:对应的退避策略。比如等待的间隔呈指数增长。
           */
//                    .setBackoffCriteria(long initialBackoffMillis, int backoffPolicy)
                  .setBackoffCriteria(JobInfo.MAX_BACKOFF_DELAY_MILLIS, JobInfo.BACKOFF_POLICY_LINEAR)
//                    .setPeriodic (long intervalMillis)//设置执行周期,每隔一段时间间隔任务最多可以执行一次。
//                    .setPeriodic(long intervalMillis,long flexMillis)//在周期执行的末端有一个flexMiliis长度的窗口期,任务就可以在这个窗口期执行。
                  //设置设备重启后,这个任务是否还要保留。需要权限:RECEIVE_BOOT_COMPLETED //ctrl+shift+y/u x
//                    .setPersisted(boolean isPersisted);
//                    .setRequiresCharging(boolean )//是否需要充电
//                    .setRequiresDeviceIdle(boolean)//是否需要等设备出于空闲状态的时候
//                    .addTriggerContentUri(uri)//监听uri对应的数据发生改变,就会触发任务的执行。
//                    .setTriggerContentMaxDelay(long duration)//设置Content发生变化一直到任务被执行中间的最大延迟时间
                  //设置Content发生变化一直到任务被执行中间的延迟。如果在这个延迟时间内content发生了改变,延迟时间会重写计算。
//                    .setTriggerContentUpdateDelay(long durationMilimms)
                  .build();
  1. 添加 jobScheduler
 jobScheduler.schedule(jobInfo);

附:


JobScheduler_第1张图片
JobScheduler.png

你可能感兴趣的:(JobScheduler)