工作经理适合这些情况吗?

Is a work manager good for these situations?

我正在开发一些需要 运行 在后台进行 UI 更新的功能,例如从输入流创建文件并在完成后通知用户

尝试使用工作管理器完成此任务后。它运行良好,但您认为它是一个不错的选择吗?

注意:我对在此过程中更新用户界面非常感兴趣,如您所知,已弃用异步任务

是的。最初,WorkManager 是一个用于管理可延迟后台工作的库。然而现在,WorkManageris a recommended solution for any persistent work, that is, the work that must be completed - no matter if the application process is stopped, or even the device is rebooted. From version 2.3.0-alpha01, WorkManager provides first-class support for setting and observing intermediate progress for workers。更新用户界面正是此功能的用途。

对我来说,推理 WorkManager 的最简单方法是扩展您的应用程序范围:

  • Activity 范围 - 作品将持续到 onDestroy 生命周期事件
  • ViewModel 范围 - 作品与 ViewModel 一样长。如果您离开 - 工作停止
  • Application 范围(例如协程的 GlobalScope)- 工作与应用进程一样长。如果用户在任务管理器中结束应用程序进程或系统将其终止 - 工作丢失
  • WorkManager - 作品在进程死亡和设备重启后仍然存在。它在引擎盖下的 Room DB 的帮助下持久化,因此您可以在重新启动应用程序进程后继续工作。