Сбой CoroutineWorker при использовании WorkManager # enqueueUniqueWork, но не при использовании WorkManager # enqueue - PullRequest
0 голосов
/ 27 февраля 2020

Я использую Android Jetpacks WorkManager . Я определил довольно стандартный CoroutineWorker, выполняющий работу с сетью и БД, но я не могу однозначно поставить его в очередь, используя WorkManager#enqueueUniqueWork.

Я всегда получаю

Work [ id=****, tags={ **** } ] was cancelled

Но если я использую WorkManager#enqueue, тот же самый рабочий запрос выполняется отлично.

Я немного не понимаю здесь , Я пытался найти похожую проблему в другом месте, но мой DDG-фу подвел меня. Я боюсь, что это связано с проблемой сопрограмм, но я не достаточно комфортно с ними, чтобы знать, где искать ...

1 Ответ

0 голосов
/ 27 февраля 2020

Это ожидается. В соответствии с ExistingWorkPolicy.REPLACE Javado c:

Если существует ожидающая (незавершенная) работа с тем же уникальным именем, отменить и удалить Это. Затем вставьте новую заданную работу.

Поэтому ожидается, что любая работа, которая использует это же уникальное имя, будет отменена. Это верно для любого типа работы - Worker получит обратный вызов к onStopped(), что является признаком того, что ему необходимо совместно отменить себя.

Сопрограммы поддерживают отмену по умолчанию так что ваш CoroutineWorker обрабатывает отмену автоматически.

...