Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android定期工作请求在应用程序启动和关闭时启动和停止_Android_Android Asynctask_Background Service_Android Workmanager_Android Background - Fatal编程技术网

Android定期工作请求在应用程序启动和关闭时启动和停止

Android定期工作请求在应用程序启动和关闭时启动和停止,android,android-asynctask,background-service,android-workmanager,android-background,Android,Android Asynctask,Background Service,Android Workmanager,Android Background,当我的应用程序启动时,我使用WorkManager创建了一个定期工作请求,以从服务器获取数据并使其正常工作。我的问题是,我想在我的应用程序关闭时取消工作请求 如何在我的应用关闭时取消工作请求或如何检测应用关闭 如有任何建议,我将不胜感激。如中所述 在科特林 在爪哇 您还可以使用标记取消工作请求 WorkManager.cancelAllWorkByTag(字符串)。请注意,此方法取消 所有的标签都可以使用。此外,您还可以使用 使用WorkManager.cancelUniqueWork(字符串)

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

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

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

如中所述

在科特林

在爪哇

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

编辑

要查看应用程序关闭事件中的帮助,请查看

Kotlin示例


若要在应用程序关闭时工作,请覆盖活动的
onDestroy()
方法,然后取消当前工作。主要有两种类型的工作

排队工作

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

WorkManager.cancelWorkById(workRequest.getId());
或者您也可以通过标记来取消工作

WorkManager.cancelAllWorkByTag(String)
@Override
protected void onDestroy() {
    super.onDestroy();
    WorkManager.cancelWorkById(UUID);
}
运行工作

WorkManager可能会停止正在运行的worker,原因有以下几种:

  • 您明确要求取消它(例如,通过调用WorkManager.cancelWorkById(UUID))
  • 对于唯一工作,您使用REPLACE的现有工作策略显式地将新工作请求排队。旧的工作请求立即被视为已终止
  • 您的工作约束不再满足
  • 系统指示应用程序出于某种原因停止工作。如果超过10分钟的执行期限,则可能发生这种情况。计划稍后重试该工作
在这些情况下,您的工作人员将收到对
ListenableWorker.onStopped()
的调用

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

@Override
public void onStopped() {
    super.onStopped();
    //Perform cleanup
}
在活动
ondestory()
方法中,通过
id
tag
停止工作

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

希望这能奏效。谢谢

是的。我知道。我想知道如何检测应用程序何时关闭?@stay_Hungy你在使用多个活动吗?@Rahul Khurana,是的..我有几个活动。@RahulKhurana,@ZaferCelaloglu。。。我认为ProcessLifecycleOwner适合我。。我会查一查,让你知道。谢谢