背景
最近公司好多人都因为Jobscheduler的使用不当导致各种问题,Job定时任务不生效或者冲突。归根结底是对Jobscheduler的使用不熟悉以及,其工作原理没有一个系统性的了解。本人也曾踩坑,所以下定决心好好熟悉Jobscheduler。
概述
在android开发中经常会有这样的需求,开发者需要在稍后的某个时间点或者满足某个特定的条件时去执行某个任务,例如当设备开始充电,或者网络状态连接到wifi状态时执行某些推送通知的任务,jobscheduler就是用来处理这类场景的任务。
Jobscheduler的android在5.0上针对于降低功耗而提出来的一种策略方案,自 Android 5.0 发布以来,JobScheduler 已成为执行后台工作的首选方式,其工作方式有利于用户。应用可以在安排作业的同时允许系统基于设备状态、电源和连接情况等具体条件进行优化。JobScheduler 可实现控制和简洁性,谷歌推出该机制是想要所有应用在执行后台任务时使用它。(还有一点需要注意的是,在7.0上谷歌给出建议:在 Android 7.0 中,删除了三个常用隐式广播 —CONNECTIVITY_ACTION、ACTION_NEW_PICTURE 和ACTION_NEW_VIDEO— 因为这些广播可能会一次唤醒多个应用的后台进程,同时会耗尽内存和电量。如果应用需要收到这些广播,充分利用 Android 7.0 以迁移到 JobScheduler 和相关的 API。)
如何使用jobscheduler
构建属于你的job任务
应用如果想使用JobScheduler API的话,首先需要创建自己需要执行的任务信息,创建任务的方法在谷歌官方文档上已经有详细介绍,这里只是放出一个实例:
JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
ComponentName jobService = new ComponentName(this, MyJobService.class);
JobInfo jobInfo = new JobInfo.Builder(100012, jobService) //任务Id等于100012
.setMinimumLatency(5000)