Ответ вслух Middle Flow, StateFlow и SharedFlow спрашивают часто обновлено

StateFlow, SharedFlow и LiveData

Вопрос

Сравни StateFlow, SharedFlow и LiveData. Что ты используешь для состояния UI и для одноразовых событий?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Для состояния экрана я использую StateFlow: у него всегда есть текущее значение, новый подписчик после поворота сразу его получает, а одинаковые значения подряд не эмитятся. Изменяю через update, чтобы не терять параллельные изменения.

Что должно прозвучать в ответе

  • StateFlow: текущее значение, начальное обязательно, равные не эмитит

  • SharedFlow: настраиваемый replay и буфер, без подписчиков значения теряются

  • LiveData: привязка к lifecycle из коробки, но только главный поток и нет операторов Flow

  • Для состояния StateFlow с collectAsStateWithLifecycle

  • Для событий Channel или событие как часть состояния

Что могут спросить следом

  • Почему событие через StateFlow плохо?
  • Как превратить Room Flow в StateFlow?
  • Что такое конфляция в StateFlow?

Разбор

Для состояния экрана я использую StateFlow: у него всегда есть текущее значение, новый подписчик после поворота сразу его получает, а одинаковые значения подряд не эмитятся. Изменяю через update, чтобы не терять параллельные изменения. SharedFlow более общий: можно настроить replay, буфер и стратегию переполнения, значения необязательны. Минус для событий: если подписчика нет, значение без replay теряется. LiveData знает про жизненный цикл из коробки, но привязан к главному потоку, слабее по операторам и не подходит для слоя данных; в новом коде его заменяют StateFlow плюс repeatOnLifecycle или collectAsStateWithLifecycle. Для одноразовых событий вроде снекбара есть два подхода: Channel с receiveAsFlow, который не теряет значение и отдаёт его одному получателю, или моделировать событие как часть состояния и сбрасывать его после обработки, как рекомендует гайд Android. Через StateFlow события делать плохо: одинаковое событие подряд не придёт.

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

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