gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:04:52 24 4
gpt4 key购买 nike

使用的组件: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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com