Выбор ответа Middle Многопоточность и WorkManager обновлено
Дубли задач WorkManager
Вопрос
Синхронизация ставится в очередь при каждом запуске приложения через enqueue. Какая проблема и как её решить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Копятся дубли задач; нужен enqueueUniqueWork с именем и политикой KEEP. Каждый enqueue создаёт новую задачу, и после нескольких запусков в очереди окажется несколько синхронизаций.
Варианты ответа
- Проблемы нет: WorkManager сам склеивает одинаковые задачи по классу Worker
- Копятся дубли задач; нужен
enqueueUniqueWorkс именем и политикойKEEPправильный ответ - WorkManager выполнит только первую задачу и удалит остальные из очереди
- Задачи будут выполняться параллельно, конфликтовать в базе и падать
Разбор
Каждый enqueue создаёт новую задачу, и после нескольких запусков в очереди окажется несколько синхронизаций. Уникальная работа с именем решает это: KEEP оставит уже запланированную, REPLACE заменит её новой (с отменой текущей), APPEND добавит в цепочку. Для периодических задач есть enqueueUniquePeriodicWork и политика UPDATE.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.