JobScheduler
2021-06-23 本文已影响0人
雨来
什么是jobScheduler
jobscheduler是 android 在5.0上针对降低功耗而提出的一种策略方案,自android5.0以来,jobScheduler 已成为执行后台任务的首选方案 google的意思 是在执行所有的后台任务都应该使用它(在jetpack workManager出现之前)。
job: 工作 任务
scheduler:调度器
为什么出现jobScheduler
在开发中,我们为了节约电池电量,经常要在间隔的某个时间点或系统的某种状态发生变化后去执行任务,例如 手机充电的时候 网络连接的时候
1、针对间隔时间段去执行任务 我们要使用AlarmManager
2、针对手机充电状态 网络连接状态 我们要使用监听系统广播
这面的步骤是比较麻烦的 而使用jobScheduler则方便的多
JobScheduler的使用步骤 (分为4个步骤)
1、创建执行任务的Service
class JobTestService:JobService() {
// companion object{
// const val TAG = "JobTestService"
// }
private val TAG = "JobTestService"
override fun onStartJob(params: JobParameters?): Boolean {
//开始业务逻辑
var jobId = params?.jobId
Log.d(TAG, "onStartJob: "+jobId)
return false
}
override fun onStopJob(params: JobParameters?): Boolean {
//取消业务逻辑
var jobId = params?.jobId
Log.d(TAG, "onStopJob: "+jobId)
return false
}
}
记着要在清单文件中注册 还要加上权限
<!--JobService注册在清单文件中 因为是四大组件之一Service的子类所以是一样的 然而jobService还要加一个权限-->
<service android:name=".JobTestService"
android:permission="android.permission.BIND_JOB_SERVICE"
/>
2、获取jobScheduler对象
//1、获取jobScheduler对象
var jobScheduler:JobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
3、创建JobInfo对象并添加约束条件(至少要有一个约束条件)
// 2、创建jobInfo (创建jobInfo的时候必须要添加一个约束条件,如果一下也不添加则会报错的)
val JOB_ID = 100;
var build:JobInfo.Builder = JobInfo.Builder(JOB_ID, ComponentName(this,JobTestService::class.java))
//通过build设置条件 (这个条目的意思 必须是充电状态 才会执行这个job)
// build.setRequiresCharging(true)
// //必须连接网络 这个任务才会执行
build.setRequiredNetworkType(NETWORK_TYPE_ANY)
//根据约束条件,创建jobInfo对象
var jobInfo = build.build()
4、开启jobScheduler
jobScheduler.schedule(jobInfo)
测试是否可行?
先把手机网络关闭 安装app 打开app后 开启网络后 看看onJobStart方法里的日志输出了没有 如果输出则测试成功
image.png