Как вы писали, цепочку, которую вы хотите построить, невозможно реализовать с помощью WorkManager. Вы можете открыть запрос на функцию на Issetraracker WorkManager .
Возвращаясь к вашей цепочке, мне интересно, может ли она быть изменена для соответствия API WorkManager:
A
|
v
-----
| |
v |
B v
| D
| |
-----
|
v
C
|
v
E
В этом случае вам нужно обработать с помощью logi c входное слияние с C
, чтобы оно выполняло то, что вы ожидаете, это, если у вас есть данные, передаваемые между Worker
классами . Но вы сохраняете те же ограничения (но в этом случае C
требует, чтобы вы завершили D
до его запуска).
В этом случае, следуя документации WorkManager , вы можете иметь что-то вроде:
val workRequestA = OneTimeWorkRequestBuilder<SaveImageToFileWorker>().build()
val workRequestB = OneTimeWorkRequestBuilder<SaveImageToFileWorker>().build()
val workRequestC = OneTimeWorkRequestBuilder<SaveImageToFileWorker>()
.setInputMerger(ArrayCreatingInputMerger::class.java)
.build()
val workRequestD = OneTimeWorkRequestBuilder<SaveImageToFileWorker>().build()
val workRequestE = OneTimeWorkRequestBuilder<SaveImageToFileWorker>().build()
var continution = workManager
.beginWith(workRequestA)
.then(listOf(workRequestB, workRequestD))
.then(workRequestC)
.then(workRequestE)
.enqueue()