【问题标题】:WorkManager - remove periodic worker for goodWorkManager - 永久删除定期工作人员
【发布时间】:2021-01-27 13:47:33
【问题描述】:

我使用以下代码进行了更新,每三个小时添加一个新的定期工作人员。

fun runCouponValidatorWorker() {
    val constraints = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
    val worker = PeriodicWorkRequestBuilder<CouponValidatorWorker>(3, TimeUnit.HOURS).setConstraints(constraints).build()
    WorkManager.getInstance()?.enqueueUniquePeriodicWork("couponValidatorWorker", ExistingPeriodicWorkPolicy.REPLACE, worker)
}

我想发布一个更新,将“杀死”这个工作人员和这个工作人员的每个计划实例。

最好的方法是什么?

【问题讨论】:

    标签: android android-workmanager


    【解决方案1】:

    您是否尝试过简单地调用它:

    WorkManager.getInstance()?.cancelUniqueWork("couponValidatorWorker")
    

    【讨论】:

    • 从文档中不清楚它是取消当前工作人员(名为“couponValidatorWorker”)(如果现在存在/正在运行),还是取消它的任何定期发生。它会取消它的任何其他预定工作人员吗?
    • 文档明确指出:“请注意,取消是一项尽力而为的政策,已经执行的工作可能会继续运行。”换句话说,它将取消所有未来和尝试取消已经运行的任务,但不能保证。 developer.android.com/reference/androidx/work/…
    • 所有具有此标识符(“couponValidatorWorker”)的工人将被取消
    • 我不认为这是正确的(现在?)。查看 WorkManagerImpl 中的代码,它似乎允许重新安排工作人员。
    • 文档没有说“取消所有未来的工作”。它说:取消具有给定名称的工作链中的所有未完成工作。所以这可能不是解决方案。
    【解决方案2】:
    WorkManager.getInstance().cancelAllWorkByTag(TAG)
    

    【讨论】:

    • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多