使用 WorkManager 调度任务 Android Jetpack 的一部分。
WorkManager 是一个 API,可供您轻松调度那些即使在退出应用或重启设备后仍应运行的可延期异步任务。WorkManager API 是一个适合用来替换先前的 Android 后台调度 API(包括 FirebaseJobDispatcher、GcmNetworkManager 和 JobScheduler)的组件,我们也建议您这样做。WorkManager 在其现代、一致的 API 中整合了其前身的功能,该 API 支持 API 级别 14,在开发时即考虑到了对电池续航的影响。
在后台,WorkManager 根据以下条件使用底层作业来调度服务:
注意:如果您的应用以 Android 10(API 级别 29)或更高版本为目标平台,那么您对 FirebaseJobDispatcher 和 GcmNetworkManager API 的调用在搭载 Android Marshmallow (6.0) 及更高版本的设备上将无法正常工作。如需迁移指导,请参阅 FirebaseJobDispatcher 和 GcmNetworkManager 迁移指南。此外,请参阅统一 Android 上的后台任务调度公告,详细了解与弃用这些 API 相关的信息。
功能
除了具备更为简单且一致的 API 之外,WorkManager 还具备许多其他关键优势,其中包括:
工作约束
使用工作约束明确定义工作运行的最佳条件。(例如,仅在设备采用 Wi-Fi 网络连接时、当设备处于空闲状态或者有足够的存储空间时运行。)
强大的调度
WorkManager 允许您使用灵活的调度窗口调度工作,以运行一次性或重复工作。您还可以对工作进行标记或命名,以便调度唯一的、可替换的工作以及监控或取消工作组。已调度的工作存储在内部托管的 SQLite 数据库中,由 WorkManager 负责确保该工作持续进行,并在设备重新启动后重新调度。此外,WorkManager 遵循低电耗模式等省电功能和最佳做法,因此您在这方面无需担心。
灵活的重试政策
有时工作会失败。WorkManager 提供了灵活的重试政策,包括可配置的指数退避政策。
工作链
对于复杂的相关工作,您可以使用流畅自然的接口将各个工作任务串联起来,这样您便可以控制哪些部分依序运行,哪些部分并行运行。
Kotlin
WorkManager.getInstance(...) .beginWith(listOf(workA,workB)) .then(workC) .enqueue()
Java
WorkManager.getInstance(...) .beginWith(Arrays.asList(workA, workB)) .then(workC) .enqueue();
对于每项工作任务,您可以定义工作的输入和输出数据。将工作串联在一起时,WorkManager 会自动将输出数据从一个工作任务传递给下一个工作任务。
内置线程互操作性
WorkManager 无缝集成 RxJava 和 协程,并可灵活地插入您自己的异步 API。
使用 WorkManager 实现可延期、可靠的工作
WorkManager 适用于可延期工作,即不需要立即运行但需要可靠运行的工作,即使退出应用或重启设备也不影响工作的执行。例如:
- 向后端服务发送日志或分析数据
- 定期将应用数据与服务器同步
WorkManager 不适用于那些可在应用进程结束时安全终止的进程内后台工作,也不适用于需要立即执行的工作。请查看后台处理指南,了解哪种解决方案符合您的需求。
使用入门
如需开始在您的应用中使用 WorkManager,请查看入门指南。
其他资源
视频
- Workmanager - MAD 技巧(系列视频)
- 使用 WorkManager(2018 年 Android 开发者峰会)
- WorkManager:深入探索高级知识(2019 年 Android 开发者峰会)