【问题标题】:Android Delete a worker from WorkManager queue or change state from FAILED to CANCELLEDAndroid 从 WorkManager 队列中删除工作人员或将状态从 FAILED 更改为 CANCELED
【发布时间】:2020-05-06 21:16:23
【问题描述】:

使用的组件:WorkManager

使用的版本:2.3.4

设备/Android 版本复制于:任何

您好 - 我想从 workmanager 队列中删除一个工作人员,即使它已经完成或正在运行。我知道当 Worker 处于 RUNNING 状态时我可以取消它,问题是当它 FINISHED 和 FAILED 我想删除它时。 Workmanager.pruneWork() 删除 WorkManager 中的所有工作人员,但我只想删除一个特定的工作人员。

这是我的场景:

  • 我运行一个工人,但它失败了我返回results.failure()
  • 现在我有一个屏幕显示所有处于Failed 状态的工人。
  • 所有失败的工人我可以选择删除或重试
  • 用户点击 (x) 图标可从 UI 中删除 Failed worker 并将其从 WorkInfoList 中删除,使其不再显示。
  • 如果没有删除单个 Worker 的选项,那么我如何将其从 WorkInfoList 中删除,以便下次用户转到该屏幕时,他不会看到他删除的 Failed Worker?
  • 或者,如果可以选择将状态从 FAILED 更改为 CANCEL,那么我可以忽略已取消的状态?
  • 还有多久后 WorkManager 会自动清除其数据库?

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: android android-workmanager


    【解决方案1】:

    我也有这个问题。 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

    我们解决此问题的唯一方法是将我们想要取消的失败工作人员替换为虚拟工作人员。实际上,是一种解决方法而不是解决方案,但它有效>.

    If status == FAILED
       enqueueUniqueWork(tagName, ExistingWorkPolicy.REPLACE, request)
    Else
       cancelAllWorkByTag(tagName)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2019-08-09
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多