Какие знаешь горячие Flow в Coroutines

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

Ответ

StateFlow и SharedFlow – два основных "горячих" потока в Kotlin Coroutines.

StateFlow:

  • Хранит текущее состояние (значение)
  • Новые подписчики сразу получают текущее значение
  • Используется для управления состоянием UI
val stateFlow = MutableStateFlow(0)
stateFlow.collect { value -> 
    println("Received: $value")
}

SharedFlow:

  • Не хранит состояние (но можно настроить replay)
  • Поддерживает несколько подписчиков
  • Полезен для событий (например, нажатий кнопок)
val sharedFlow = MutableSharedFlow<Int>()
sharedFlow.emit(1) // без подписчиков значение теряется

Ключевое отличие: StateFlow всегда имеет значение и реплицирует его новым коллекторам, а SharedFlow работает как событийный поток.