Выбор ответа Middle Многопоточность и WorkManager обновлено

Дубли задач WorkManager

Вопрос

Синхронизация ставится в очередь при каждом запуске приложения через enqueue. Какая проблема и как её решить?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Копятся дубли задач; нужен enqueueUniqueWork с именем и политикой KEEP. Каждый enqueue создаёт новую задачу, и после нескольких запусков в очереди окажется несколько синхронизаций.

Варианты ответа

  1. Проблемы нет: WorkManager сам склеивает одинаковые задачи по классу Worker
  2. Копятся дубли задач; нужен enqueueUniqueWork с именем и политикой KEEPправильный ответ
  3. WorkManager выполнит только первую задачу и удалит остальные из очереди
  4. Задачи будут выполняться параллельно, конфликтовать в базе и падать

Разбор

Каждый enqueue создаёт новую задачу, и после нескольких запусков в очереди окажется несколько синхронизаций. Уникальная работа с именем решает это: KEEP оставит уже запланированную, REPLACE заменит её новой (с отменой текущей), APPEND добавит в цепочку. Для периодических задач есть enqueueUniquePeriodicWork и политика UPDATE.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.