在链接的工作连续中仅观察一个工作请求

问题描述 投票:0回答:1

我有一组链接的工作请求,我只想观察其中的第一个。

我使用仅分配给第一个请求的唯一标签来获得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(", ")) } })

android android-livedata android-jetpack android-workmanager
1个回答
0
投票
这已按预期工作。如果只需要获取一个WorkInfoWorkRequest,则可以通过其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 { ... })

© www.soinside.com 2019 - 2024. All rights reserved.