工人代码更新后会发生什么?

What happens when a Worker code is updated?

我有一个一次性的 (WorkManager) worker,它有一些逻辑允许它在不满足某些条件时重试 (Result.retry())。如果这个 worker 已经 运行ning 并且有计划的重试,当我更新那个 worker 的代码并且用户然后更新应用程序时会发生什么?会不会:

  1. 运行老工人代码?
  2. 继续 运行ning 但 运行 使用新的工作人员代码?
  3. 取消当前作业,因为它检测到工作人员代码已更改?
  4. ???

我倾向于认为它会是#3,但不太确定。

Tldr:WorkManager 将 运行 新代码(选项 2)。

WorkManager 在保存 Worker 类名的房间数据库中跟踪计划的工作,这与设备上安装的应用程序版本和将请求排队的应用程序版本无关。

如果您需要更改默认行为,您可以在新版本首次 运行 时实施一些迁移规则到 运行。

注意 如果您更改 Worker 的类名或将其完全删除,则需要进行迁移。在这种情况下,您需要取消这些 Worker 的排队请求,否则它将因 ClassNotFound 异常而失败。