如何为Worker(WorkerManager API)排队任务?

How to queue tasks for Worker (WorkerManager API)?

我有一连串的请求

fun foo(){
....
WorkManager.getInstance(iC)
            .beginWith(downloadWorkRequest)
            .then(unzipWorkRequest)
            .then(deleteWorkRequest)
            .enqueue()
 .....
 }

整个任务(假设)需要 1 分钟...问题是如果我在一分钟内调用此方法几次(例如 4 次),那么 WorkManager 真的会启动此任务4次异步。

我需要同步执行所有这些任务(如队列)。

怎么做?

您可以使用 unique work in this case with a ExistingWorkPolicy.APPEND

fun foo(){
....
WorkManager.getInstance(iC)
           .beginUniqueWork(
               "my_unique_work_name",
               ExistingWorkPolicy.APPEND,
               downloadWorkRequest)
           .then(unzipWorkRequest)
           .then(deleteWorkRequest)
           .enqueue()
 .....
 }

您可以在 WorkManager codelab 中找到这方面的示例。