1. WorkManager是什么
WorkManager是适合用于持久性工作的推荐解决方案。如果工作始终要通过应用重启和系统重新启动来调度,便是持久性的工作。由于大多数后台处理操作都是通过持久性工作完成的,因此 WorkManager 是适用于后台处理操作的主要推荐 API。
持久性工作的类型
WorkManager 可处理三种类型的持久性工作:
立即执行:必须立即开始且很快就完成的任务,可以加急。
长时间运行:运行时间可能较长(有可能超过 10 分钟)的任务。
可延期执行:延期开始并且可以定期运行的预定任务。
2. 何时使用WorkManager
管理和调度可延迟的,但需保证执行的后台任务库
1.可延迟的:即使不立即执行,仍有必要在未来完成的任务
例如:向服务器发送数据(上传分析数据)
- 保证执行:即使在应用程序被关闭,或者设备重启的情况下,任务也会照常执行
例如:备份图片
以下是一些适合使用 WorkManager 的任务的典型示例:
- 上传日志
- 对图片应用滤镜并保存图片
- 定期将本地数据与网络同步
值得注意的是,我们谈到的“后台操作”,不是,也不包括“后台线程”。
WorkManager不能用来替代Kotlin Coroutines,线程池,以及RxJava等API,但可以和他们配合使用。
WorkManager也不适用于需要在特定时间触发的任务(可以用AlarmManager)
3. 如何使用WorkManager
需要了解以下几个 WorkManager 类:
-
Worker
:此位置用于放置您希望在后台执行的实际工作的代码。您需要扩展此类并替换doWork()
方法。 -
WorkRequest
:此类表示请求执行某些工作。您将在创建WorkRequest
的过程中传入Worker
。在创建WorkRequest
时,您还可以指定Constraints
等内容,例如运行Worker
的时间。 -
WorkManager
:这个类实质上可以调度WorkRequest
并使其运行。它以一种在系统资源上分散负载的方式调度WorkRequest
,同时遵循您指定的约束条件。
具体示例代码请看官方示例:https://developer.android.com/topic/libraries/architecture/workmanager/basics?hl=zh-cn
4. WorkManager的优势
WorkManager 是一个极其灵活的库,具有许多其他优势。这其中包括:
- 支持异步一次性任务和定期任务
- 支持网络条件、存储空间和充电状态等约束条件
- 链接复杂的工作请求,包括并行运行工作
- 将来自一个工作请求的输出用作下一个工作请求的输入
- 处理到 API 级别的兼容性,可向后兼容至 API 级别 14(请参阅备注)
- 无论是否使用 Google Play 服务都可以运行
- 遵循系统健康最佳做法
- 提供 LiveData 支持,可在界面中轻松显示工作请求状态
注意:
WorkManager 依赖于若干 API,例如JobScheduler
和AlarmManager
。WorkManager 会根据用户设备 API 级别等条件选择使用适合的 API。如需了解详情,请查看 WorkManager 文档。
练习Demo(使用WorkManager Codelab编写的Demo): https://github.com/ooxiaoyan/android-workmanager-start_kotlin
(使用 Blur-O-Matic,对照片进行模糊处理,并将处理后的照片保存到文件中)
最后,附学习资源:
- Bilibili 视频链接 https://www.bilibili.com/video/av56276889/
- WorkManager 文档 https://developer.android.google.cn/topic/libraries/architecture/workmanager/basics
- WorkManager Codelab: https://developer.android.com/codelabs/android-workmanager#0
网友评论