Метод EditWorkManager getWorkInfoByIdLiveData не предоставляет WorkInfo - PullRequest
3 голосов
/ 28 января 2020

Я пытаюсь получить свое WorkerInfo с помощью метода getWorkInfoByLiveData, который существует в экземпляре WorkManager.

val workInfo = workManager.getWorkInfoByIdLiveData(uuid).value

WorkInfo всегда равен нулю. Также я вызываю этот метод из основного потока.

Сценарий того, как я проверяю этот метод. Я пытаюсь поставить в очередь моего работника, когда пользователь отправляет сетевой запрос, и если inte rnet не подключен, я просто регистрирую работу в WorkManager. Через некоторое время, если я попытаюсь получить WorkerInfo с UUID , он всегда будет давать мне ноль.

Примечание: При вызове getWorkInfoByLiveData В это время Worker не выполняется.

Не ожидаю, что WorkManager выдаст мне WorkInfo с ENQUEUED State.

Редактировать 1: Итак, другой сценарий будет таким: приложение, над которым я работаю, похоже на социальное приложение. Теперь, после регистрации первого работника, предположим, что пользователь не хочет видеть сообщения от определенного пользователя c, поэтому мне нужно зарегистрировать моего второго работника, поскольку пользователь inte rnet в данный момент недоступен. Теперь мне нужно отменить ранее зарегистрированного работника, а затем создать цепочку работников, чтобы не показывать сообщения пользователя для 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 всегда равен нулю.

1 Ответ

1 голос
/ 29 января 2020

Примечание : Livedata не будет вычислять значение до тех пор, пока не будет добавлен активный наблюдатель.

getWorkInfoByIdLiveData() возвращает LiveData<WorkInfo>, которое необходимо наблюдать, чтобы получить значение workInfo:

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

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

Вы можете взглянуть на кодовую метку WorkManager , чтобы увидеть, как ее можно использовать.

...