Холодные потоки и горячие потоки принципиально отличаются тем, когда они производят значения и как они ведут себя при наличии нескольких сборщиков.
Стандартный Flow — это холодный поток: он начинает отправлять значения только когда сборщик начинает их собирать. Каждый сборщик получает свою независимую последовательность с самого начала.
flow {
emit(1)
emit(2)
} // Ничего не выполняется до сбора
Горячий поток активен независимо от того, есть ли сборщики. Значения могут быть отправлены до того, как любой сборщик подпишется, — это значит, что опоздавшие сборщики могут пропустить уже отправленные значения.
Основные типы горячих потоков:
SharedFlow — рассылает события сразу нескольким сборщикамStateFlow — хранит одно актуальное значение, всегда доступное для новых сборщиков| Тип | Сценарий |
|---|---|
Flow | HTTP-запросы, чтение файлов |
SharedFlow | Разовые UI-события, аналитика |
StateFlow | UI-состояние, значения конфигурации |
Используй холодные потоки, когда каждому потребителю нужна полная последовательность данных независимо. Используй горячие потоки, когда нескольким потребителям нужно работать с одним общим потоком данных — например, при рассылке UI-событий или хранении общего состояния приложения.
Холодный Flow начинает выполняться только когда хотя бы один collector начнёт собирать данные, и каждый новый collector получает свой независимый поток с самого начала.
Новый — ещё не проверен сообществом
Вы