首页 > 解决方案 > Android jetpack 如何在另一个链的特定工作任务后启动一个单独的工作管理器链

问题描述

我想用 jetpack workmanager 链来实现这个场景:

完成chain1后,chain2和chain3同时启动

我已经在文档中找到了这个,但这与我需要的相反。 WorkContinuation.html#combine

标签: androidandroid-jetpackandroid-workmanager

解决方案


当您将一组工作链接在一起时,您使用then需要单个OneTimeWorkRequest. 您可以使用then带有列表的OneTimeWorkRequest来拆分链。

根据链接工作文档

如果您添加 OneTimeWorkRequests 列表,这些请求可能会并行运行。

导致您想要的行为。

val workManager = WorkManager.getInstance(myContext)

// Create all your work
val workA, workB, workC, workZ, workD, workE, workF

// Then build chain1
val chain1 = workManager.beginWith(workA)
    .then(workB)
    .then(workC)

// Now link in both Z and D
chain1.then(workZ, workD)
    .enqueue()

// There's nothing after Z, so there's no explict work
// you need to do for chain2

// Then build off of D to finish chain3
workManager.beginWith(workD)
    .then(workE)
    .then(workF)
    .enqueue()

推荐阅读