WorkManager

2019-10-09  本文已影响0人  Allenlll
 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"

 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)
val cacheCleanupTask =
        OneTimeWorkRequestBuilder<CacheCleanupWorker>()
    .setConstraints(constraints)
    .addTag("cleanup")
    .build()
val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
        .setBackoffCriteria(
                BackoffPolicy.LINEAR,
                OneTimeWorkRequest.MIN_BACKOFF_MILLIS,
                TimeUnit.MILLISECONDS)
        .build()
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()

<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()
}
上一篇 下一篇

猜你喜欢

热点阅读