У меня есть набор связанных рабочих запросов, и я хочу наблюдать только первый из них.
Я получаю LiveData
, используя уникальный тег, назначенный только первому запросу. Внутри фильтра я снова фильтрую List<WorkInfo>
для рабочего тега.
Несмотря на всю фильтрацию, я получаю три уведомления об успехе, по одному для каждого успешного рабочего запроса в цепочке, даже если тег был добавлен только к первому запросу.
Я не уверен, является ли это ошибкой или это ожидаемое поведение (тег присваивается всем рабочим запросам в цепочке).
Есть ли способ наблюдать только один из рабочих запросов вцепочка?
Мой код пока:
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(", "))
}
})