美文网首页
Kotlin的WorkManager

Kotlin的WorkManager

作者: 兜兜里面没有钱 | 来源:发表于2020-06-21 10:43 被阅读0次

    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<RefreshDataWorker>(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

          本文链接:https://www.haomeiwen.com/subject/kfdbxktx.html