android - 如何按顺序执行工作管理器任务(当您没有同时处理所有工作时)

标签 android kotlin android-workmanager

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

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

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

我假设 enqueue 意味着所有的工作都会像队列一样一次一个地发生。有没有办法让它以这种方式工作?

最佳答案

您可以使用 WorkManager 的 UniqueWork 构造来将工作排队,以便它只执行一次。 Unique 作品由 uniqueName 标识。

在您的情况下,您应该使用不同的 ExistingWorkPollicy,如 documentation 中所述: ExistingWorkPollicy.APPEND .这确保您的新请求附加在使用相同 uniqueName 的其他请求之后(这实际上创建了一个工作链)。

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

关于android - 如何按顺序执行工作管理器任务(当您没有同时处理所有工作时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56603977/

相关文章:

java - 如何从左移二进制和解释十六进制数字节数组?

android - Android Studio:用于将数据上传到Firebase的辅助类

android - 我可以始终使用 WorkManager 而不是协程吗?

android - adb 服务器已过期。杀死...无法绑定(bind) 'tcp:5037' ADB 服务器没有确认 * 无法在 ubuntu 14.04 LTS 中启动守护进程 *

c# - 即将到来的 GCM 响应是 : Error=NotRegistered

java - 如何创建一个 Whatsapp 按钮来向我的 Android 应用程序中的特定联系人发送消息?

java - 如何在Spring应用程序中存储从另一个系统检索到的 token ?

android - WorkManager 只需要在特定的时间间隔内工作,如何使用工作管理器约束?工作管理器示例

javascript - Android 版 Chrome 上的通知显示在哪里?

java - 使用 OpenCSV 解析 csv 文件时未找到类 "java.beans.Introspector"