我正在尝试使用WorkManager实例中存在的getWorkInfoByLiveData方法获取我的WorkerInfo。
val workInfo = workManager.getWorkInfoByIdLiveData(uuid).value
WorkInfo 一直是 null。同时,我正在主线程中调用此方法。
我检查该方法的场景如下:当用户发送一个网络请求但没有连接到互联网时,我会简单地向 WorkManager 注册一个 Work。过了一段时间,如果我尝试使用 UUID 获取 WorkerInfo,它将始终给我 null。
注意:当调用 getWorkInfoByLiveData 时,Worker 并没有立即执行。
我期望 WorkManager 给我带来 ENQUEUED 状态的 WorkInfo。
Edit 1: 还有一种情况是,我正在开发的应用程序类似于社交应用程序。现在,在注册了第一个 worker 后,假设用户不想看到特定用户的帖子,那么这就是我需要注册第二个 worker 的地方,因为这时用户无法连接到互联网。现在我需要做的是取消先前注册的 worker,并创建一个 Chain of workers,以不显示某个用户的帖子 beginWith,然后获取所有帖子。为了取消 worker,我检查前一个 worker 是否仍处于 Enqueued State,如果是则取消它并创建一个新的 worker 链。
以下是代码。
fun Context.isWorkerRegistered(uuid: UUID?): Boolean {
val id = uuid ?: return false
val workerInfo = workManager.getWorkInfoByIdLiveData(id).value
return workerInfo?.state == WorkInfo.State.ENQUEUED
}
workInfo实例始终为空。
assertEquals(viewModel.liveData1.value, "foo") // Passes
即使没有活动观察者也会通过。这是因为getValue始终会给出最后一个值。 此外,对于我的情况,我也有一个活动观察者,但仍然无法获取该值。 - Ahsan Saeed