Как будут вести себя StateFlow и SharedFlow при изменении конфигурации

«Как будут вести себя StateFlow и SharedFlow при изменении конфигурации» — вопрос из категории Coroutines и Flow, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

StateFlow и SharedFlow ведут себя по-разному при изменении конфигурации:

StateFlow
Сохраняет свое состояние (последнее emitted значение) и продолжает работу после изменения конфигурации. Подписчики получат последнее значение при повторной подписке.

val stateFlow = MutableStateFlow(0) // сохранит значение при повороте

SharedFlow
Не хранит состояние (если не используется replay). При изменении конфигурации:

  • Теряет все не доставленные события
  • Новые подписчики не получат старые значения (если replay = 0)
  • Можно использовать replay для кэширования N последних значений
val sharedFlow = MutableSharedFlow<Int>(replay = 1) // сохранит 1 последнее значение

Для обоих случаев поток продолжает работать в фоне, но подписки View будут пересозданы.