我想将一些对象上传到服务器。我使用工作管理器和uniqueWork来避免上传重复的对象。这项工作受到限制,因此只能在有互联网连接时才能运行。问题是我希望每个这些对象一次上传一个,但是所有工作都一次完成。
我知道我可以使用beginWith和workContinuations依次执行工作,但是不幸的是,可以在不同的时间创建多个对象,因此在创建工作时我无法访问所有工作。
val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
.setConstraints(networkConstraint)
.build()
WorkManager.getInstance()
.enqueueUniqueWork(uniqueName, ExistingWorkPolicy.KEEP, workRequest)
我假设enqueue
意味着所有工作都会像队列一样一次发生。有没有办法让它那样工作?
答案 0 :(得分:0)
您可以使用WorkManager的UniqueWork
构造来使工作入队,以便仅执行一次。唯一作品由uniqueName
标识。
根据您的情况,您应该使用其他ExistingWorkPollicy
,如documentation:ExistingWorkPollicy.APPEND
所述。这样可以确保将您的新请求附加到使用相同uniqueName
的其他请求之后(这实际上会创建工作链)。
val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
.setConstraints(networkConstraint)
.build()
WorkManager.getInstance()
.enqueueUniqueWork(uniqueName, ExistingWorkPolicy.APPEND, workRequest)