Я пытаюсь получить свой WorkerInfo с помощью метода getWorkInfoByLiveData, который существует в экземпляре WorkManager.
val workInfo = workManager.getWorkInfoByIdLiveData(uuid).value
WorkInfo всегда имеет значение NULL. Кроме того, я вызываю этот метод из основного потока.
Сценарий того, как я проверяю этот метод. Я пытаюсь поставить своего рабочего в очередь, когда пользователь отправляет сетевой запрос, и если Интернет не подключен, я просто регистрирую работу в WorkManager. Через некоторое время, если я попытаюсь получить WorkerInfo с UUID, он всегда будет давать мне null.
Примечание. При вызове getWorkInfoByLiveData Worker в это время не выполняется.
Разве я не ожидаю, что WorkManager предоставит мне WorkInfo с состоянием ENQUEUED.
Редактировать 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 всегда имеет значение NULL.