美文网首页
JobScheduler

JobScheduler

作者: 孤独的根号十二 | 来源:发表于2018-12-17 15:37 被阅读6次

    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.png

    相关文章

      网友评论

          本文标题:JobScheduler

          本文链接:https://www.haomeiwen.com/subject/dqfckqtx.html