Workermanager替换会影响已经运行的实例吗?

4
我们在队列中收到很多请求。每当我们收到任何请求时,我们都会实例化workermanager工作。ExistingWorkPolicy.REPLACE如何工作?
文档说:
如果存在具有相同唯一名称的待处理(未完成)工作,则取消并删除它。
它是否也会在中途杀死现有正在运行的worker?我们真的不希望现有的worker在中途停止,当worker在排队等待时被替换是可以的,但不在运行状态下。我们可以在这里使用REPLACE选项吗?

https://developer.android.com/reference/androidx/work/ExistingWorkPolicy

1个回答

1
正如WorkManager指南和你的问题所解释的那样,当你使用REPLACE作为现有worker策略来排队一个新的UniqueWorkRequest时,这将停止当前正在运行的先前worker。

你的worker会发生什么取决于你如何实现它(WorkerCoroutineWorker或另一个ListenableWorker子类)以及如何处理停止和取消]2

这意味着你的Worker需要“协作”完成并清理你的worker:

在唯一工作的情况下,您明确使用 REPLACE 的 ExistingWorkPolicy 队列中的新 WorkRequest。旧的 WorkRequest 立即被视为终止。 在这些条件下,您的 Worker 将收到对 ListenableWorker.onStopped() 的调用。 在操作系统决定关闭您的应用程序时,您应该执行清理并协作完成您的 Worker。

谢谢,我会尝试使用onStopped()回调函数。 - Aram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接