繁体   English   中英

Android WorkManager fork 单个成多个链并加入

[英]Android WorkManager fork single into multiple chains and join

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

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

所以首先, A应该运行,然后B然后CD并行运行。 之后, E应该运行。

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

正如您所写,您要构建的链无法使用 WorkManager 实现。 您可以在WorkManager 的 issuetracker上打开功能请求。

回到你的链,我想知道是否可以修改它以适应 WorkManager API:

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

在这种情况下,您需要使用某种逻辑处理输入合并到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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM