Ответ
Холодные потоки (например, Flow в Kotlin) создают данные при каждом вызове collect(), что полезно для одноразовых операций. Горячие потоки (например, StateFlow, SharedFlow) эмитят данные независимо от подписчиков, что удобно для постоянных обновлений UI.
Когда преобразовывать:
- Холодный → Горячий: когда данные нужны нескольким подписчикам (кеширование, общее состояние)
val coldFlow = flow { emit(data) }
val hotFlow = coldFlow.shareIn(scope, SharingStarted.Eagerly)
- Горячий → Холодный: когда нужна одноразовая обработка (например, для
retry)
val coldFlow = hotFlow.asSharedFlow().take(1)
Нюанс: горячие потоки могут терять данные, если подписчик не успел их обработать.