我有一组链接的工作请求,我只想观察其中的第一个。
我使用仅分配给第一个请求的唯一标签来获得LiveData
。在过滤器内部,我再次过滤worker标签的List<WorkInfo>
。
尽管进行了所有过滤,但我得到了[[three成功通知,即使该标记仅添加到第一个请求,也收到了链中每个成功的工作请求的通知。
我不确定这是错误还是预期的行为(标记已分配给链中的所有工作请求)。是否有办法只观察链中的一个工作要求?
到目前为止,我的代码:
val workerTag = "a randomly generated long string"
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(syncConstraints)
.addTag(workerTag)
.build()
val followOnRequest = OneTimeWorkRequestBuilder<FollowOnWorker>()
.build()
val finalRequest = OneTimeWorkRequestBuilder<FinalWorker>()
.build()
WorkManager.getInstance(applicationContext)
.beginUniqueWork(WORK_ONE_TIME_SYNC, ExistingWorkPolicy.REPLACE, syncRequest)
.then(followOnRequest)
.then(finalRequest)
.enqueue()
WorkManager.getInstance(applicationContext)
.getWorkInfosByTagLiveData(workerTag)
.observe(this, Observer { workInfoList ->
val workInfo = workInfoList.find { it.tags.contains(workerTag) }
?: return@Observer
// THIS OBSERVER IS CALLED FOR ALL THE REQUESTS IN THE CHAIN ABOVE WITH ALL THE TAGS
if (workInfo.state.isFinished) {
Timber.i(workInfo.tags.joinToString(", "))
}
})
WorkInfo
的WorkRequest
,则可以通过其id
或这种方式获得:val continuation = WorkManager.getInstance(applicationContext)
.beginUniqueWork(WORK_ONE_TIME_SYNC, ExistingWorkPolicy.REPLACE, syncRequest)
continuation.then(followOnRequest)
.then(finalRequest)
.enqueue()
continuation.getWorkInfosLiveData()
.observe(this, Observer { ... })