【问题标题】:Android Periodic Work Request Start and Stop when the app is starting and closing应用程序启动和关闭时的 Android 定期工作请求启动和停止
【发布时间】:2019-09-05 06:03:06
【问题描述】:

当我的应用程序启动时,我使用 WorkManager 创建了一个定期工作请求,以从服务器获取数据并使其正常工作。我的问题是,我想在我的应用关闭时取消工作请求。

我的应用关闭时如何取消工作请求或如何检测应用正在关闭?

如果有任何建议,我将不胜感激。

【问题讨论】:

标签: android android-asynctask background-service android-workmanager android-background


【解决方案1】:

Android Documentation中所述。

在 Kotlin 中

WorkManager.cancelWorkById(workRequest.id)

在 Java 中

WorkManager.cancelWorkById(workRequest.getId());

您也可以使用标签取消 WorkRequests WorkManager.cancelAllWorkByTag(字符串)。请注意,此方法取消 都使用这个标签。此外,您可以取消所有工作 使用 WorkManager.cancelUniqueWork(String) 的唯一名称。

编辑

要查看应用关闭事件的帮助,请查看ProcessLifecycleOwner

Kotlin 示例

https://github.com/jshvarts/AppLifecycleDemo

【讨论】:

  • 是的。我知道。我想知道如何检测应用何时关闭?
  • @stay_hungry 你在使用多项活动吗?
  • @Rahul Khurana,是的..我有几项活动。
  • @RahulKhurana ,@ZaferCelaloglu... 我认为 ProcessLifecycleOwner 适合我。我会检查让你们。谢谢
【解决方案2】:

为了可以在应用关闭上工作,重写 Activity 的onDestroy() 方法,然后取消当前工作。工作主要有两种

排队工作

如果您不再需要运行之前排队的工作,您可以要求取消它。最简单的方法是使用其 id 取消单个 WorkRequest 并调用

WorkManager.cancelWorkById(workRequest.getId());

或者您也可以通过tag取消工作。

WorkManager.cancelAllWorkByTag(String)

运行工作

WorkManager 可能会停止正在运行的工作人员有几个不同的原因:

  • 您明确要求取消它(例如,通过调用 WorkManager.cancelWorkById(UUID))。
  • 在唯一工作的情况下,您显式地将一个新的 WorkRequest 加入了现有工作策略 REPLACE 的队列中。旧的 WorkRequest 立即被视为终止。
  • 不再满足您工作的限制条件。
  • 系统指示您的应用因某种原因停止工作。如果您超过 10 分钟的执行期限,就会发生这种情况。该工作计划稍后重试。

在这些情况下,您的工作人员将接到电话至ListenableWorker.onStopped()

根据您的要求,您明确要求取消它(第 1 点)。 您需要在您的工作人员类中覆盖 onStopped() 并执行清理。

@Override
public void onStopped() {
    super.onStopped();
    //Perform cleanup
}

在您的活动onDestroy() 方法中,通过idtag 停止工作。

@Override
protected void onDestroy() {
    super.onDestroy();
    WorkManager.cancelWorkById(UUID);
}

希望这会奏效。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多