《Android WorkManager 使用手册》一 ---
2019-09-28 本文已影响0人
R7_Perfect
Android 中异步循环的几种:
- Timer
- Handler加Thread
- Rxjava
这里要介绍的是Android官方组件 WorkManager
WorkManager API 可以让异步循环变得很容易,即使app退出或者重新启动,这些任务仍会运行
关键点:
- API 14及以上
- API 23+设备上使用JobScheduler
- API 14-22上用BroadcastReceiver + AlarmManager
- 根据网络可用性和电池状况,WorkManager 会有不同限制
- 可以一次性或周期性安排任务
- 可以监视和管理任务
- 形成任务链管理任务
- app或者设备重启后还能确保任务执行
- 省电
WorkManager可用于可延迟的任务:
- 向后端服务发送日志或分析
- 定期将app数据与服务器同步
不适用:
- 应用离开时可以安全终止的任务
- 立即执行的任务
将WorkManager加到你的工程
build.gradle中添加:
dependencies {
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"
// optional - Test helpers
androidTestImplementation "androidx.work:work-testing:$work_version"
}
创建一个后台任务
class UploadWorker(appContext: Context, workerParams: WorkerParameters)
: Worker(appContext, workerParams) {
override fun doWork(): Result {
// Do the work here--in this case, upload the images.
uploadImages()
// Indicate whether the task finished successfully with the Result
return Result.success()
}
}
Result返回的是doWork函数的结果:
- Result.success() 成功
- Result.failure() 失败
- Result.retry() 在某个时间点重新发起
创建一个WorkRequest去运行Worker
有OneTimeWorkRequest和PeriodicWorkRequest
val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>().build()
workrequest还可以包含额外信息,例如任务运行时的约束、工作的输入、延迟和重试工作的策略。这些选项可参考https://developer.android.com/topic/libraries/architecture/workmanager/how-to/define-work。
程序执行任务
定义完workrequest,就可以用WorkManager的enqueue()方法执行它
WorkManager.getInstance(myContext).enqueue(uploadWorkRequest)
下一章针对WorkRequest作详细介绍