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 之后分叉成两条平行链。 (如果包含 BC 的左链不是两个请求的实际链而只是一个请求,那将很简单。)

如您所写,您想要构建的链无法使用 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()