使用的组件:WorkManager
使用的版本:2.3.4
复制的设备/Android 版本:任何
您好 - 我想从 workmanager
中删除一个 worker 队列,即使它已经完成或正在运行。我知道当 Worker 处于 RUNNING 状态时我可以取消它,问题是当它 FINISHED 和 FAILED 我想删除它时。 Workmanager.pruneWork()
删除 WorkManager 中的所有工作人员,但我只想删除一个特定的工作人员。
这是我的场景:
results.failure()
Failed
中的 worker 。状态。 任何帮助都感激不尽。谢谢。
最佳答案
我也有这个问题。 FAILED 和 CANCELED 都是完成状态,这就是为什么当我们尝试通过标签、id 等取消时系统什么都不做。
正如您在此处看到的:https://developer.android.com/topic/libraries/architecture/workmanager/how-to/states-and-observation
和这里:
https://developer.android.com/topic/libraries/architecture/workmanager/how-to/managing-work#cancelling
我们解决这个问题的唯一方法是用虚拟 worker 替换我们想要取消的失败 worker 。实际上,是一种解决方法而不是解决方案,但它有效>.<
假人所做的只是返回 Result.SUCCESS。
If status == FAILED
enqueueUniqueWork(tagName, ExistingWorkPolicy.REPLACE, request)
Else
cancelAllWorkByTag(tagName)
关于Android 从 WorkManager 队列中删除工作人员或将状态从 FAILED 更改为 CANCELED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61645558/