Вот сценарий, с которым я столкнулся:
Когда WorkerA ставится в очередь впервые, WorkerB выполняется нормально. Он завершается, возвращает результат, и WorkerA обрабатывает его, в конечном итоге завершая, как ожидалось.
Когда WorkerA ставится в очередь во второй раз, состояние WorkerB отображается как «работает», но я этого не делаю. Не вижу никаких журналов от WorkerB. Как будто рабочий процесс завис или не выполняет свой код.
Однако, когда я закрываю приложение и перезапускаю его, код WorkerB выполняется и появляются журналы.
Что я пробовал:
Я убедился, что WorkerB правильно поставлен в очередь в WorkerA, используя WorkManager.getInstance().enqueue().
Проверил журналы на наличие каких-либо ошибок, но не обнаружено.
Вопросы:
Почему WorkerB может не выполняться должным образом, когда WorkerA ставит его в очередь во второй раз?
Почему перезапуск приложения приводит к тому, что WorkerB выполняет свое код?
Настройка WorkManager:
Код постановки в очередь WorkerA
Код: Выделить всё
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(UCEMSCommissioningWorker.class)
.addTag("ucemsWorker")
.setInitialDelay(10000, TimeUnit.SECONDS)
.build();
workManager.enqueueUniqueWork(UCEMSCommissioningWorker.class.getName(), ExistingWorkPolicy.KEEP, workRequest);
Log.i("Recommission", "BLE Service UCEMS: startWorker: worker enqueued");
workManager.getWorkInfoByIdLiveData(workRequest.getId()).observeForever(observer);
Код: Выделить всё
val data = Data.Builder().putString(
"TAG_FROM_ACTIVITY",
"UCEMS",
).build()
val request = OneTimeWorkRequest.Builder(DeviceScanWorker::class.java)
.setInputData(data)
.build()
workManager.enqueueUniqueWork("DeviceScanWorker", ExistingWorkPolicy.REPLACE, request)
WorkerA и WorkerB не используют UniqueWork.
Любая информация о Буду очень признателен, почему это происходит и как это исправить!
Подробнее здесь: https://stackoverflow.com/questions/790 ... -android-w