Android WorkManager 将单个分叉到多个链中并加入
Android WorkManager fork single into multiple chains and join
我想使用 WorkManager 设置以下工作:
A
|
v
-----
| |
v |
B v
| D
v |
C |
| |
-----
|
v
E
所以首先,A
应该 运行,然后是 B
,接着是 C
,而 D
运行 是并行的。之后,E
应该 运行.
加入运行宁E
之前的两条平行链可以用WorkContinuation.combine()
完成。我的问题是我不知道如何在 A
之后分叉成两条平行链。 (如果包含 B
和 C
的左链不是两个请求的实际链而只是一个请求,那将很简单。)
如您所写,您想要构建的链无法使用 WorkManager 实现。您可以在 WorkManager's issuetracker.
上打开功能请求
回到你的链,我想知道是否可以修改它以适应 WorkManager API:
A
|
v
-----
| |
v |
B v
| D
| |
-----
|
v
C
|
v
E
在这种情况下,您需要使用一些逻辑来处理输入合并到 C
中,以便它按照您的预期进行,如果您在 Worker
之间传递数据类。但是你保持相同的约束(但在这种情况下 C
要求你在它开始之前终止 D
)。
在这种情况下,在 WorkManager's documentation 之后,您可以得到如下内容:
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()
我想使用 WorkManager 设置以下工作:
A
|
v
-----
| |
v |
B v
| D
v |
C |
| |
-----
|
v
E
所以首先,A
应该 运行,然后是 B
,接着是 C
,而 D
运行 是并行的。之后,E
应该 运行.
加入运行宁E
之前的两条平行链可以用WorkContinuation.combine()
完成。我的问题是我不知道如何在 A
之后分叉成两条平行链。 (如果包含 B
和 C
的左链不是两个请求的实际链而只是一个请求,那将很简单。)
如您所写,您想要构建的链无法使用 WorkManager 实现。您可以在 WorkManager's issuetracker.
上打开功能请求回到你的链,我想知道是否可以修改它以适应 WorkManager API:
A
|
v
-----
| |
v |
B v
| D
| |
-----
|
v
C
|
v
E
在这种情况下,您需要使用一些逻辑来处理输入合并到 C
中,以便它按照您的预期进行,如果您在 Worker
之间传递数据类。但是你保持相同的约束(但在这种情况下 C
要求你在它开始之前终止 D
)。
在这种情况下,在 WorkManager's documentation 之后,您可以得到如下内容:
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()