zoukankan      html  css  js  c++  java
  • JobScheduler android任务调度处理组件(类似QuartZ)

    JobScheduler是Android L(API21)新增的特性,用于定义满足某些条件下(电量,网络,时间,屏幕熄/亮 ,设备是否空闲 等)执行的任务。它的宗旨是把一些不是特别紧急的任务放到更合适的时机批量处理,这样可以有效的节省电量。

    自 Android 5.0 发布以来,JobScheduler 已成为执行后台工作的首选方式,其工作方式有利于用户。应用可以在安排作业的同时允许系统基于内存、电源和连接情况进行优化。JobScheduler 可实现控制和简洁性。

    schedule用法过程说明:

    一   创建继承于JobService的对象(该service运行在主线程

         public class MyJobService extends JobService {
         @Override
         public boolean onStartJob(JobParameters params)
         { return false; }
     
        @Override
        public boolean onStopJob(JobParameters params)
        { return false; }
        }

         1  在onStartJob中完成具体的业务逻辑

         当任务开始时会执行onStartJob方法,因为这是系统用来触发已经被执行的任务。这个方法返回一个boolean值。如果返回值是false,系统假设这个方法返回时任务已经执行完毕。如果返回值是true,那么系统假定这个任务正要被执行。当任务执行完毕时你需要调用jobFinished来通知系统。


         2   当系统接收到一个取消请求时,系统会调用onStopJob方法取消正在等待执行的任务
    其实onStopJobjobFinished正常调用结束一个job时,也是不会调用的,只有在该job没有被执行完,就被cancel掉的时候回调到,比如某个job还没有执行就被JobSchedulerCancel掉时,或者在某个运行条件不满足时,比如原来在Wifi环境允许的某个任务,执行过程中切换到了非Wifi场景,那也会调用该方法。改方法也返回一个boolean值,返回true表示会重新放到JobSchedulerreScheduler,false表示直接忽略。

    二  创建JobInfo对象(采用builder模式),设置监听任务执行的条件(监听电量,网络,时间,屏幕亮/熄,设备是否空闲 等)

         创建定时任务时,你可以使用JobInfo.Builder来构建一个JobInfo对象,然后传递给Scheduler底层的jobSchedulerService。

         JobInfo.Builder接收两个参数,第一个参数是你要运行的任务的标识符ID,第二个是这个JobService组件的类名

         1  ComponentName jobService = new ComponentName(this, MyJobService.class); //JobService组件的名包裹

         2  JobInfo jobInfo = new JobInfo.Builder(123, jobService) //任务Id等于123

                    .setMinimumLatency(5000)// 任务最少延迟时间 

                    .setOverrideDeadline(60000)// 任务deadline,当到期没达到指定条件也会开始执行 

                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)// 网络条件,默认值NETWORK_TYPE_NONE

                    .setRequiresCharging(true)// 是否充电 

                    .setRequiresDeviceIdle(false)// 设备是否空闲

                    .setPersisted(true) //设备重启后是否继续执行

                    .setBackoffCriteria(3000,JobInfo.BACKOFF_POLICY_LINEAR) //设置退避/重试策略

                    .build();


    三  先获取JobScheduler调度器的代理对象(要理解这个过程,那么就需要先看看JobSchedulerService的启动过程)

             JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);

             1 对象里面主要有schedule(jobinfo对象执行条件) 启动:

             scheduler.schedule(jobInfo);

             2 有cancel(job任务id) 取消:

             scheduler.cancel(123); //取消jobId=123的任务

             scheduler.cancelAll(); //取消当前uid下的所有任务

     

    JobScheduler是个系统Service,我们的将自己的JobInfo传给它,由系统负责调用,其中这个schedule方法会返回一个整型。如果schedule方法失败了,它会返回一个小于0的错误码。否则它会我们在JobInfo.Builder中定义的标识id。

    如果你的应用想停止某个任务,你可以调用JobScheduler对象的cancel(int jobId)来实现;如果你想取消所有的任务,你可以调用JobScheduler对象的cancelAll()来实现。



     

    JobScheduler调度器过程(JobSchedulerService的启动过程)

    https://www.cnblogs.com/softwarelanguagebs/p/9531562.html

  • 相关阅读:
    发音技巧
    SCROM标准和一些概念(转)
    我要告诉测试新手的 (转)
    LCMS与LMS
    SCORM标准的LMS ELearning 学习平台介绍
    【转载】经常在网上看人家的帖子,分享给组里面的兄弟共赏
    选择学习管理系统(LMS)不可忽略的十大要素
    委托(delegate)的使用
    LMS/LCMS相关概念简介
    软件测试
  • 原文地址:https://www.cnblogs.com/softwarelanguagebs/p/9531547.html
Copyright © 2011-2022 走看看