WorkManager中ExistingWorkPolicy提及的pending状态具体指代什么?
pending(uncompleted)的具体定义
ExistingWorkPolicy描述中提到的pending (uncompleted),特指所有未进入终态的WorkManager任务,对应官方公开的5种任务状态,范围如下:
- 属于pending的状态:
Enqueued(已入队等待调度、延迟待触发的任务都属于该状态)、Running(正在执行中的任务) - 不属于pending的终态:
Succeeded(执行成功)、Failed(执行失败)、Cancelled(已被取消)
唯一性执行场景的注意事项
如果你需要实现逻辑全局仅能完整执行一次,仅靠ExistingWorkPolicy.KEEP配置是不够的:
- 当之前的同名任务已经进入
Succeeded/Failed/Cancelled终态后,再次提交同名任务时,会因为没有pending任务而成功入队,导致逻辑重复执行 - 建议额外在本地存储(如SharedPreferences、Room)中持久化一个执行标记,任务执行成功后将标记置为已完成,每次提交任务前先检查该标记,只有未完成时才提交任务
内容的提问来源于stack exchange,提问作者casolorz
相关产品推荐
相关产品推荐

