В чем разница между горячим и холодным Flow

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

Ответ

Горячий Flow (StateFlow, SharedFlow) начинает эмитить данные сразу при создании, даже если нет подписчиков. Подписчик получает только новые данные после подписки. Пример:

val hotFlow = MutableStateFlow(0) // начнет эмитить сразу

Холодный Flow (обычный Flow) начинает эмитить данные только при наличии подписчика и для каждого подписчика запускается заново. Пример:

val coldFlow = flow { 
    emit(1) // выполнится только при collect
}

Ключевые различия:

  1. Холодный Flow - ленивый, горячий - активный сразу
  2. Холодный Flow перезапускается для каждого подписчика
  3. Горячие Flow обычно используются для состояния UI, холодные - для одноразовых операций