使用 WorkManager 调度任务 Android Jetpack 的一部分

WorkManager 是一个 API,使您可以轻松调度那些即使在退出应用或重启设备时仍应运行的可延期异步任务。WorkManager API 是一个针对先前的 Android 后台调度 API(包括 FirebaseJobDispatcherGcmNetworkManagerJobScheduler)的合适的建议替换组件。WorkManager 在新版一致性 API 中整合了其前身的功能,该 API 支持 API 级别 14,同时可保证电池续航时间。

在后台,WorkManager 根据以下条件使用底层作业调度服务:

如果设备在 API 级别 23 或更高级别上运行,系统会使用 JobScheduler。在 API 级别 14-22 上,系统会使用 GcmNetworkManager(如果可用),否则会使用自定义 AlarmManager 和 BroadcastReciever 实现作为备用。

注意:如果您的应用以 Android 10(API 级别 29)或更高版本为目标平台,那么在搭载 Android Marshmallow (6.0) 及更高版本的设备上将不再支持 FirebaseJobDispatcher 和 GcmNetworkManager API 调用。如需迁移指导,请参阅 FirebaseJobDispatcherGcmNetworkManager 迁移指南。此外,请参阅统一 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,请查看入门指南

其他资源

视频

博客