#android-workmanager
Вопрос:
У меня есть одноразовый работник (WorkManager) с некоторой логикой, которая позволяет ему повторить попытку (Result.retry ()), когда некоторые условия не выполняются. Если этот работник был запущен и имеет запланированную повторную попытку, что произойдет, когда я обновлю код этого работника, а затем пользователь обновит приложение? Было бы это:
- запустить старый рабочий код?
- продолжайте работать, но запускайте с использованием нового рабочего кода?
- отменить текущее задание, так как оно обнаруживает, что рабочий код изменился?
- ???
Я склонен думать, что это будет № 3, но не совсем уверен.
Ответ №1:
Tldr: WorkManager запустит новый код (вариант 2).
WorkManager отслеживает запланированную работу в базе данных помещения, сохраняя имя класса работника, независимо от версии приложения, установленного на устройстве, и версии приложения, которое поставило запрос в очередь.
Вы можете реализовать некоторые правила миграции для запуска при первом запуске новой версии, если вам нужно изменить поведение по умолчанию.
Примечание.Миграция необходима, если вы изменили имя класса своего Работника или вообще удалили его как Работника. В этом случае вам нужно отменить запросы, поставленные в очередь для этих работников, или произойдет сбой с обнаруженным исключением Classnot.
Комментарии:
1. Спасибо! Я понимаю, что работник повторит попытку по следующему расписанию с новым кодом. Очень признателен.
2. Затем вы можете принять ответ, если он охватывает ваш вопрос.