JobScheduler是Android L(API21)新增的特性,用于定义知足某些条件下(电量,网络,时间,屏幕熄/亮 ,设备是否空闲 等)执行的任务。它的宗旨是把一些不是特别紧急的任务放到更合适的时机批量处理,这样能够有效的节省电量。html
自 Android 5.0 发布以来,JobScheduler 已成为执行后台工做的首选方式,其工做方式有利于用户。应用能够在安排做业的同时容许系统基于内存、电源和链接状况进行优化。JobScheduler 可实现控制和简洁性。android
schedule用法过程说明:web
一 建立继承于JobService的对象(该service运行在主线程)网络
1 在onStartJob中完成具体的业务逻辑app
二 建立JobInfo对象(采用builder模式),设置监放任务执行的条件(监听电量,网络,时间,屏幕亮/熄,设备是否空闲 等)ide
建立定时任务时,你可使用JobInfo.Builder来构建一个JobInfo对象,而后传递给Scheduler底层的jobSchedulerService。post
JobInfo.Builder接收两个参数,第一个参数是你要运行的任务的标识符ID,第二个是这个JobService组件的类名。优化
1 ComponentName jobService = new ComponentName(this, MyJobService.class); //JobService组件的名包裹ui
2 JobInfo jobInfo = new JobInfo.Builder(123, jobService) //任务Id等于123this
.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()来实现。
https://www.cnblogs.com/softwarelanguagebs/p/9531562.html