Workermanager REPLACE повлияет на уже работающий экземпляр? - PullRequest
0 голосов
/ 07 января 2020

Мы получаем много запросов в очереди. Мы создаем экземпляр работы WorkManager по мере поступления запросов. Как работает ExistingWorkPolicy.REPLACE?

В документе написано

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

Это также убьет существующего работающего работника посередине? Мы действительно не хотим, чтобы существующий работник остановился посередине, его можно заменить, когда работник поставлен в очередь, но не в рабочем состоянии. Можем ли мы использовать опцию ЗАМЕНА здесь?

https://developer.android.com/reference/androidx/work/ExistingWorkPolicy

1 Ответ

0 голосов
/ 07 января 2020

Как объяснено в Руководстве WorkManager и в вашем вопросе, когда вы ставите в очередь новый UniqueWorkRequest, используя REPLACE в качестве существующей рабочей политики, это остановит предыдущего работника, который в данный момент работает.

То, что происходит с вашим работником, зависит от того, как вы его реализовали (Worker, CoroutineWorker или другой ListenableWorker подкласс) и как вы справляетесь с остановками и увольнениями] 2 .

Это означает, что ваш работник должен "совместно" завершить sh и очистить вашего работника:

В случае уникальной работы вы явно поставили в очередь новый WorkRequest с Существующая рабочая политика ЗАМЕНА. Старый WorkRequest немедленно считается прекращенным.

При этих условиях ваш работник получит вызов на номер ListenableWorker.onStopped(). Вы должны выполнить очистку и совместно завершить работу sh вашего работника на случай, если ОС решит закрыть ваше приложение.

...