Android 从 WorkManager 队列中删除工作人员或将状态从 FAILED 更改为 CANCELED

标签 android android-workmanager

使用的组件:WorkManager

使用的版本:2.3.4

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

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

这是我的场景:

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

  • 任何帮助都感激不尽。谢谢。

    最佳答案

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

    相关文章:

    java - 从资源加载和解析 xml 时出现问题

    java - Android 中类似于 PageView 的元素

    java - 与 androidx.work.logger 发生不兼容的ClassChangeError

    Flutter workmanager 插件在运行任务时无法与任何其他插件一起使用

    android - 使用 android WorkManager 响应 Native HeadlessJs 任务调用

    android - 允许 Recyclerview 项目滚动到 Recyclerview 顶部

    android - 强制按钮停留在电话屏幕的底部

    android - 将 Google Analytics 添加到我的应用程序时出现 XML 错误

    android - 使用 WorkManager 排队工作时出现 IllegalAccessException

    java - 如何将参数传递给Workmanager DoWork方法