Android WorkManager将单个分支插入多个链并加入

问题描述 投票:0回答:1

我想使用WorkManager设置以下工作:

   A
   |
   v
 -----
|     |
v     |
B     v
|     D
v     |
C     |
|     |
 -----
   |
   v
   E

因此,首先应该运行A,然后运行B,然后是C,而D并行运行。之后,E应该运行。

E可以在运行WorkContinuation.combine()之前加入两个平行链。我的问题是,我无法弄清楚在A之后如何将叉子分叉成两个平行的链。 (如果包含BC的左链不是两个请求的实际链,而是一个请求,则很简单。)

android android-workmanager
1个回答
1
投票

正如您所写,要构建的链无法通过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()
© www.soinside.com 2019 - 2024. All rights reserved.