WorkerB не выполняется после того, как WorkerA во второй раз поставил его в очередь в Android WorkManagerAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 WorkerB не выполняется после того, как WorkerA во второй раз поставил его в очередь в Android WorkManager

Сообщение Anonymous »

Я работаю с Android WorkManager, и у меня есть два рабочих процесса: WorkerA и WorkerB. WorkerA ставит WorkerB в очередь из своего метода doWork().
Вот сценарий, с которым я столкнулся:
Когда 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);
WorkerA ставит WorkerB в очередь с помощью WorkManager.enqueue().

Код: Выделить всё

            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)
Оба исполнителя являются OneTimeWorkRequests.
WorkerA и WorkerB не используют UniqueWork.
Любая информация о Буду очень признателен, почему это происходит и как это исправить!

Подробнее здесь: https://stackoverflow.com/questions/790 ... -android-w
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»