Kotlin的WorkManager

WorkManager是 安卓体系结构之一,也是Android JetPack的一部分。WorkManager用于可延期并需要保证执行的后台工作。
在WorkManager进行后台工作时,它是解决兼容性问题以及电池和系统运行状况的最佳做法。WorkManager提供与API级别14的兼容性。WorkManager根据设备API级别,选择适当的方式来调度后台任务。它可能会使用JobScheduler(在API 23或更高版本)的组合,


图片.png

在build.gradle中添加依赖
implementation "android.arch.work:work-runtime-ktx:$1.0.1"
现在在代码里面实现它

class RefreshDataWorker(appContext: Context,params:WorkerParameters) : CoroutineWorker(appContext,params){
    override suspend fun doWork(): Result {
        return Result.success()
    }
}

必须实现它的doWork方法,在这个方法里面返回一个Result的对象。
Result有三个状态,success,failure,retry分别对应成功,失败,和重试。
然后在application中初始化它
val repeatingRequest = PeriodicWorkRequestBuilder(1, TimeUnit.DAYS)
.setConstraints(constraints)
.build()
WorkManager.getInstance().enqueueUniquePeriodicWork(
RefreshDataWorker.WORK_NAME,
ExistingPeriodicWorkPolicy.KEEP,
repeatingRequest)
这里的PeriodicWorkRequestBuilder创建了一个周期任务,这里的参数表示一天执行一次这个任务。
setConstraints表示是添加约束,我们在上面初始化下约束
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)//代表网络处于不计量的时候不运行
.setRequiresBatteryNotLow(true)//电量低约束
.setRequiresCharging(true)//充电约束
.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setRequiresDeviceIdle(true)
}
}//sdk约束
.build()
约束添加成功之后,把它添加到PeriodicWorkRequestBuilder的builder中,然后加这个request加入WorkManager的enqueueUniquePeriodicWork。这样WorkManager就会运行起来了。

你可能感兴趣的:(Kotlin的WorkManager)