android - 如何按顺序执行工作经理任务(当您没有同时完成所有工作时)
问题描述
我想将一些对象上传到服务器。我正在使用工作管理器和 uniqueWork 来避免上传重复的对象。工作受到限制,因此它们仅在有互联网连接时才能运行。问题是我希望这些对象中的每一个一次上传一个,但是所有的工作都同时发生。
我知道我可以使用 beginWith 和 workContinuations 顺序执行工作,但不幸的是可以在不同时间创建多个对象,因此我无法在创建工作时访问所有工作。
val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
.setConstraints(networkConstraint)
.build()
WorkManager.getInstance()
.enqueueUniqueWork(uniqueName, ExistingWorkPolicy.KEEP, workRequest)
我假设enqueue
所有的工作都会像排队一样一次完成。有没有办法让它这样工作?
解决方案
您可以使用 WorkManager 的UniqueWork
构造来将工作排入队列,以便它只执行一次。独特的作品由uniqueName
.
在您的情况下,您应该使用不同的ExistingWorkPollicy
,如文档中所述:ExistingWorkPollicy.APPEND
。这确保您的新请求附加在其他使用相同请求的请求之后uniqueName
(这实际上创建了一个工作链)。
val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
.setConstraints(networkConstraint)
.build()
WorkManager.getInstance()
.enqueueUniqueWork(uniqueName, ExistingWorkPolicy.APPEND, workRequest)
推荐阅读
- arrays - 快速,如何生成多维数组?
- batch-file - 在 msgbox 中执行 cmd 命令
- node.js - HTTPS 请求正在向自身发出请求
- python - Discord.py:on_member_join 突然停止工作
- java - 使用 java steams 填充地图的最佳方法
- python - 如何将所有状态代码附加到一个列表?
- javascript - 将对象内的所有空、未定义数据转换为字符串数据
- c++ - 如何使选定的单选按钮更改标签的文本
- android - 如何使android kotiln RecyclerView textview 动态高度
- linux - xargs 和命令替换问题