Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android jetpack如何在另一个链的特定工作任务之后启动一个单独的工作管理器链_Android_Android Jetpack_Android Workmanager - Fatal编程技术网

Android jetpack如何在另一个链的特定工作任务之后启动一个单独的工作管理器链

Android jetpack如何在另一个链的特定工作任务之后启动一个单独的工作管理器链,android,android-jetpack,android-workmanager,Android,Android Jetpack,Android Workmanager,我想用jetpack workmanager链实现此场景: 链1=A->B->c CHAINE2=Z(仅一个工作请求) 链3=D->E->F 链1完成后,链2和链3同时启动 我已经在文档中找到了这一点,但它与我需要的正好相反。 当您将一组工作链接在一起时,您可以使用接受单个OneTimeWorkRequest的。您可以使用获取OneTimeWorkRequest列表的来拆分链 根据: 如果添加OneTimeWorkRequests列表,这些请求可能会并行运行 导致你想要的行为 val wor

我想用jetpack workmanager链实现此场景:

  • 链1=A->B->c
  • CHAINE2=Z(仅一个工作请求)
  • 链3=D->E->F
链1完成后,链2和链3同时启动

我已经在文档中找到了这一点,但它与我需要的正好相反。

当您将一组工作链接在一起时,您可以使用接受单个
OneTimeWorkRequest
的。您可以使用获取
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()

@阿姆鲁奥斯-那么?WorkManager已为您处理应用程序重新启动。感谢您的回复,但可能会发生工作重复。因为应用程序可能会在工作请求仍在运行时重新启动。我想使用以下命令,但没有成功:`workManager.beginUniqueWork(UNIQUE_work_NAME1,ExistingWorkPolicy.KEEP,workRequestA)。然后(workRequestB)。然后(workRequestC)。然后(listOf(workRequestZ,workRequestD)).enqueue()`是的,WorkManager处理应用程序重新启动,但它没有避免重复工作,除非我使用WorkManager.beginUniqueWork,我尝试了它,但没有工作,最后一个chine没有被触发。听起来你是在应用程序启动时无条件地排队等待更多工作,而不是检查工作是否已经存在(在应用程序被终止并重新启动时会中断)-如果您只是想阻止并发运行工作,最好检查您的状态。
KEEP
特别是,如果系统中已经有任何具有该名称的唯一工作,则只删除您排队的任何内容(无论是开始还是完成),所以这可能不是您想要的。您是对的,我将尝试在一个链中完成所有工作,然后使用workRequestD中的协同程序并行完成workRequestZ的工作,再加上使用shared pref检查每个工作的状态。如果可行,我将稍后发布解决方案。再次感谢您。