Ответ
Холодный Flow — это поток данных, который начинает испускать значения только при вызове терминального оператора (collect). Каждый новый подписчик получает независимую последовательность данных. Пример:
val coldFlow = flow {
println("Emitting")
emit(1)
emit(2)
}
// Вызовется дважды для каждого collect
coldFlow.collect { println(it) }
coldFlow.collect { println(it) }
Горячий Flow (например, SharedFlow/StateFlow) — активен независимо от наличия подписчиков и эмитит данные всем текущим подписчикам. Данные могут быть потеряны, если нет активных коллекторов. Пример:
val sharedFlow = MutableSharedFlow<Int>()
// Данные будут получены только активными подписчиками
sharedFlow.emit(1)
Ключевые различия:
- Холодный — ленивый, горячий — активный
- Холодный — независимые последовательности, горячий — общий источник
- Холодный — данные не теряются, горячий — возможна потеря данных