如何确保 WorkManager 取消我的 Worker?

y.a*_*lam 5 android android-architecture-components android-workmanager

WorkManager 文档中提到取消 Worker 是尽力而为

WorkManager 尽最大努力取消任务,但这本质上是不确定的——当您尝试取消任务时,任务可能已经在运行或已完成

如果我有一个用例,必须Worker调用其中一种取消方法时取消该操作,该怎么办?

pfm*_*ggi 4

正如您所写,WorkManager 只能尽力取消工作。特别是,如果计划运行某个任务,但您取消了它,WorkManager 会将其从计划中删除。

但是,如果任务已经在运行,WorkManager 就无法安全地中断它。最好的选择是编写 Worker 类来处理外部取消。2018 年 Android 开发者峰会上录制的“Working with WorkManager”演讲(大约第 15 分钟)对此进行了介绍。

要成为一个好公民,您可以使用以下方法池化 WorkManager:ListenableWorker.isStopped()。您可以将此与onStopped回调结合起来,以便在您或操作系统请求停止任务时清理代码。