如果应用程序直接从应用程序托盘中删除,如何取消 any/all 工作管理器请求?

How to cancel any/all work manager request if the app is removed directly from app tray?

我正在尝试在应用程序中使用 Android WorkManager 来安排一些后台任务。要求是当应用程序直接从应用程序托盘中删除时取消 API 请求。

我可以使用服务 class -> onTaskRemoved 方法检测应用程序是否从应用程序托盘中删除。我在这里发出 WorkManager API 取消请求。

public void onTaskRemoved(Intent rootIntent) {
    super.onTaskRemoved(rootIntent);
    Log.d("onTaskRemoved","onTaskRemoved called");
    WorkManager.getInstance().cancelAllWork();
}

正如预期的那样工作正常。请提出是否有任何其他更好的替代方案来实现它。


对于某些 android 设备(对于某些供应商)他们的实施就像从应用程序托盘中删除任何应用程序意味着他们将 强制停止 app.So 服务,工作管理器也被停止。


对于某些其他 android 设备(对于某些 其他供应商)他们的实施就像从应用程序托盘中删除任何应用程序一样意味着他们将 stop/kill 仅应用程序的当前 activity 而不会强制停止应用程序。因此服务、工作管理器不会停止。
首先您需要检查您的目标设备属于哪个类别。

如果您需要这样做,我认为您可能使用了错误的工具。 WorkManager 专门用于需要在某个时刻持久化和执行的请求。考虑改用 Executor 或协程。