如何依次执行工作管理器任务(当您没有同时进行所有工作时)

时间:2019-06-14 19:12:21

标签: android kotlin android-workmanager

我想将一些对象上传到服务器。我使用工作管理器和uniqueWork来避免上传重复的对象。这项工作受到限制,因此只能在有互联网连接时才能运行。问题是我希望每个这些对象一次上传一个,但是所有工作都一次完成。

我知道我可以使用beginWith和workContinuations依次执行工作,但是不幸的是,可以在不同的时间创建多个对象,因此在创建工作时我无法访问所有工作。

val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
            .setConstraints(networkConstraint)
            .build()
WorkManager.getInstance()
            .enqueueUniqueWork(uniqueName, ExistingWorkPolicy.KEEP, workRequest)

我假设enqueue意味着所有工作都会像队列一样一次发生。有没有办法让它那样工作?

1 个答案:

答案 0 :(得分:0)

您可以使用WorkManager的UniqueWork构造来使工作入队,以便仅执行一次。唯一作品由uniqueName标识。

根据您的情况,您应该使用其他ExistingWorkPollicy,如documentationExistingWorkPollicy.APPEND所述。这样可以确保将您的新请求附加到使用相同uniqueName的其他请求之后(这实际上会创建工作链)。

val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
            .setConstraints(networkConstraint)
            .build()
WorkManager.getInstance()
            .enqueueUniqueWork(uniqueName, ExistingWorkPolicy.APPEND, workRequest)