首页 > 解决方案 > EditWorkManager 方法 getWorkInfoByIdLiveData 未提供 WorkInfo

问题描述

我正在尝试使用 WorkManager 实例中存在的 getWorkInfoByLiveData 方法获取我的 WorkerInfo。

val workInfo = workManager.getWorkInfoByIdLiveData(uuid).value

WorkInfo 始终为空。另外,我正在从主线程调用此方法。

我如何检查此方法的场景。当用户发送网络请求时,我尝试将我的工作人员排队,如果没有连接互联网,我只需向 WorkManager 注册一个工作。一段时间后,如果我尝试使用UUID获取 WorkerInfo ,它总是会给我空值。

注意:调用getWorkInfoByLiveData时,此时不会执行 Worker。

难道我不希望 WorkManager 给我带有ENQUEUED状态的 WorkInfo。

编辑1: 所以,另一种情况是这样的,我正在使用的应用程序就像一个社交应用程序。现在注册第一个工作人员后,假设用户不想看到特定用户的帖子,所以我需要在这里注册我的第二个工作人员,因为此时用户互联网不可用。现在我需要做的是取消以前注册的工作人员,然后创建一个工作人员链,不显示用户的帖子到beginWith然后获取所有帖子。现在为了取消工作人员,我检查之前的工作人员是否仍处于排队状态,然后取消它并创建一个新的链或工作人员。

这是代码。

fun Context.isWorkerRegistered(uuid: UUID?): Boolean {
   val id = uuid ?: return false
   val workerInfo = workManager.getWorkInfoByIdLiveData(id).value
   return workerInfo?.state == WorkInfo.State.ENQUEUED
}

workInfo实例始终为空

标签: androidandroid-jetpackandroid-workmanagerworkmanagers

解决方案


注意:在添加活动观察者之前,Livedata 不会计算该值。

getWorkInfoByIdLiveData()返回 aLiveData<WorkInfo>您需要观察以获取 workInfo 值:

val status = workManager.getWorkInfoByIdLiveData(uuid)
                        .observe(this, Observer{ workInfo ->

    if (workInfo!=null){
        // ...
    }
}

您可以查看WorkManager 的 codelab以了解如何使用它。


推荐阅读