Android WorkManager将单个链分叉为多个链并连接
我想使用WorkManager设置以下工作:Android WorkManager将单个链分叉为多个链并连接,android,android-workmanager,Android,Android Workmanager,我想使用WorkManager设置以下工作: A | v ----- | | v | B v | D v | C | | | ----- | v E 因此,首先,A应该运行,然后是B,然后是C,而D应该并行运行。之后,E应该运行 运行E之前连接两个平行链可以使用WorkContinuation.combine()完成。我的问题是,我不知道如何在A之后分叉成两条平行链。(如果包含B和C的左链不是由两个
A
|
v
-----
| |
v |
B v
| D
v |
C |
| |
-----
|
v
E
因此,首先,A
应该运行,然后是B
,然后是C
,而D
应该并行运行。之后,E
应该运行
运行
E
之前连接两个平行链可以使用WorkContinuation.combine()
完成。我的问题是,我不知道如何在A
之后分叉成两条平行链。(如果包含B
和C
的左链不是由两个请求组成的实际链,而只是一个请求,这将很简单。)如您所述,您想要构建的链不可能通过WorkManager实现。您可以在上打开功能请求
回到您的链,我想知道是否可以修改它以适应WorkManager API:
A
|
v
-----
| |
v |
B v
| D
| |
-----
|
v
C
|
v
E
在这种情况下,您需要使用一些逻辑来处理输入合并到C
中,以便它实现您所期望的,如果您在工作者
类之间传递了数据。但您保持相同的约束(但在本例中,C
要求您在启动前终止D
)
在本例中,您可以使用以下内容:
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()
val workRequestA=OneTimeWorkRequestBuilder().build()
val workRequestB=OneTimeWorkRequestBuilder().build()
val workRequestC=OneTimeWorkRequestBuilder()
.setInputMerge(ArrayCreatingInputMerge::class.java)
.build()
val workRequestD=OneTimeWorkRequestBuilder().build()
val workRequestE=OneTimeWorkRequestBuilder().build()
var continuation=workManager
.beginWith(工作请求A)
。然后(列表(工作请求B、工作请求D))
.然后(工作请求c)
。然后(工作请求)
.enqueue()
谢谢@pfmaggi!很高兴知道我的要求目前是不可能的。还感谢您提出的解决方案,它启发了我以下解决方案:在我的情况下,运行时间较长的工作是C
。因此,我将把C
和D
并行化,并在A
之后单独使用B
。