Android定期工作请求在应用程序启动和关闭时启动和停止
当我的应用程序启动时,我使用WorkManager创建了一个定期工作请求,以从服务器获取数据并使其正常工作。我的问题是,我想在我的应用程序关闭时取消工作请求 如何在我的应用关闭时取消工作请求或如何检测应用关闭 如有任何建议,我将不胜感激。如中所述 在科特林 在爪哇 您还可以使用标记取消工作请求 WorkManager.cancelAllWorkByTag(字符串)。请注意,此方法取消 所有的标签都可以使用。此外,您还可以使用 使用WorkManager.cancelUniqueWork(字符串)的唯一名称 编辑 要查看应用程序关闭事件中的帮助,请查看 Kotlin示例Android定期工作请求在应用程序启动和关闭时启动和停止,android,android-asynctask,background-service,android-workmanager,android-background,Android,Android Asynctask,Background Service,Android Workmanager,Android Background,当我的应用程序启动时,我使用WorkManager创建了一个定期工作请求,以从服务器获取数据并使其正常工作。我的问题是,我想在我的应用程序关闭时取消工作请求 如何在我的应用关闭时取消工作请求或如何检测应用关闭 如有任何建议,我将不胜感激。如中所述 在科特林 在爪哇 您还可以使用标记取消工作请求 WorkManager.cancelAllWorkByTag(字符串)。请注意,此方法取消 所有的标签都可以使用。此外,您还可以使用 使用WorkManager.cancelUniqueWork(字符串)
若要在应用程序关闭时工作,请覆盖活动的
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适合我。。我会查一查,让你知道。谢谢