如何使用WorkManager将新工作链接到已入队的工作?

时间:2019-02-08 13:48:29

标签: android kotlin android-jetpack android-workmanager

假设我们有两个工作人员:WorkerAWorkerB。现在WorkerB无法在Worker完成之前启动。通常,我们将这两个工人链接在一起:

WorkManager.getInstance()
    .beginWith(workA)
    .then(workB)
    .enqueue()

但是问题是我们不知道何时可以开始WorkerB的确切时间(我们只是知道它必须等待WorkerA)。

实际上有两种情况:

  1. 我们想在WorkerB开始时启动WorkerA,但尚未结束。
  2. 我们想在WorkerB完成后开始WorkerA

在理想环境中,WorkManager可以选择等待某些工作或链接到已经存在的工作。

我曾考虑过从WorkerB开始WorkerA,然后再结束工作,但是我不确定返回WorkManager之前从Work访问Result是否合适实践。

1 个答案:

答案 0 :(得分:1)

创建工作链时,WorkerB仅在WorkerA成功完成之后才开始。如果WorkerA失败,则WorkerB也将被标记为失败。

如果要在WorkerB启动时启动WorkerA,则可以使用WorkerB的{​​{1}}方法将WorkerA放入队列。请记住,此时两个工作人员都已解耦。