美文网首页
WorkManager

WorkManager

作者: Allenlll | 来源:发表于2019-10-09 17:39 被阅读0次
 def work_version = "2.2.0"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

  • 概述
    Workmanager是JetPack的一部分,用来进行任务管理,异步处理,可以设置各种条件下执行,例如电池,内存等。可以在应用重启或者手机重启后重新开始执行。
    网络链接变化时执行,电量足够时执行,闲置时执行。
  • 有两种任务类型,一种是周期执行,一种是执行一次
 var constraint = Constraints.Builder()
                .setRequiresCharging(true)
                .build()

        var repeatRequest = PeriodicWorkRequest.Builder(MyWorker::class.java,1,TimeUnit.SECONDS)
                .setConstraints(constraint)
                .build()

        WorkManager.getInstance(this).enqueue(repeatRequest)


    var data = Data.Builder()//最大10kb
                .putString("string", "myString")
                .build()
        var oneTimeWorkRequest = OneTimeWorkRequest.Builder(DataWorker::class.java)
                .setInputData(data)
                .addTag("cleanUP")//增加tag,用来找到
                .build()

        WorkManager.getInstance(this).enqueue(oneTimeWorkRequest)
  • 可以设置限制执行条件,可以设置延迟时间,可以设置重试机制,可以设置输入输出数据,可以为Work设置tag
val cacheCleanupTask =
        OneTimeWorkRequestBuilder<CacheCleanupWorker>()
    .setConstraints(constraints)
    .addTag("cleanup")
    .build()
val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
        .setBackoffCriteria(
                BackoffPolicy.LINEAR,
                OneTimeWorkRequest.MIN_BACKOFF_MILLIS,
                TimeUnit.MILLISECONDS)
        .build()
  • 可以得到任务执行的状态
    stop时,任务的后续处理。stop时work还会继续执行
WorkManager.getInstance(myContext).getWorkInfoByIdLiveData(uploadWorkRequest.id)
        .observe(lifecycleOwner, Observer { workInfo ->
            if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
                displayMessage("Work finished!")
            }
        })
  • 任务链执行
    一个父任务失败或者取消,后面的任务不再执行
WorkManager.getInstance(myContext)
    // Candidates to run in parallel
    .beginWith(listOf(filter1, filter2, filter3))
    // Dependent work (only runs after all previous work in chain)
    .then(compress)
    .then(upload)
    // Don't forget to enqueue()
    .enqueue()

  • unitWork
    独有任务,开启任务时,设备唯一名称,重复任务将有很多执行状态,可以设置各种Policy,增加,还是取消,还是替换
  • 可以自定义Work的配置
    首先移除默认的初始化方法
<provider
    android:name="androidx.work.impl.WorkManagerInitializer"
    android:authorities="${applicationId}.workmanager-init"
    tools:node="remove" />

然后增加自己的配置方法
可以配置线程池等信息

class myApplication() : Application(), Configuration.Provider {
     override getWorkManagerConfiguration() =
           Configuration.Builder()
                .setMinimumLoggingLevel(android.util.Log.INFO)
                .build()
}

相关文章

网友评论

      本文标题:WorkManager

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