首页 > 解决方案 > 工作开始后Android Work manager约束更改

问题描述

在工作处理过程中约束不满足后,工作经理是否会停止工作。例如,工作需要连接充电器的约束,连接充电器后工作开始,然后充电器断开连接,工作管理器是否会停止工作,因为它不再满足约束

标签: androidbackgroundconstraintsandroid-workmanager

解决方案


如果在 worker 执行期间约束不再满足,WorkManager 将发出停止信号。
请记住,停止在 WorkManager 中是协作的,因此您的 Worker 将需要实现onStopped()回调,并且它可以isStopped() 在执行长时间运行的循环/计算时使用该方法。
文档

您应该合作中止您正在进行的任何工作并释放您的 Worker 持有的任何资源。例如,此时您应该关闭数据库和文件的打开句柄。您可以使用两种机制来了解您的 Worker 何时停止。

另外来自文档:

注意: WorkManager 会忽略接收到 onStop 信号的 Worker 设置的 Result,因为 Worker 已经被视为已停止。

如果您使用的是 CoroutineWorkers,它们将在定义的范围内自动处理停止。来自WorkManager 的线程指南

CoroutineWorkers 通过取消协程并传播取消信号来自动处理停止。你不需要做任何特别的事情来处理停工。


推荐阅读