Kotlin Flow — это холодный асинхронный поток данных, построенный на основе корутин. Он последовательно испускает значения и является рекомендуемым подходом для работы с асинхронными операциями данных в Kotlin.
Ключевая характеристика Flow в том, что он холодный — то есть не производит и не испускает никакие значения до того, как будет вызван терминальный оператор. Самый распространённый терминальный оператор — это collect:
flow.collect { value -> println(value) }
Каждый новый подписчик запускает свежее, независимое выполнение потока.
map, filter и flatMap| Cold Flow | Hot Stream (например SharedFlow) | |
|---|---|---|
| Начинает испускать | На collect | Немедленно, независимо от наличия подписчиков |
| Подписчики | Каждый получает свой поток | Делят один и тот же поток |
| Пример использования | API-запросы, запросы к БД | События UI, broadcast'ы |
Flow хорошо подходит для асинхронных данных, потому что:
Terminal operators, такие как collect, необходимы для активации Flow и инициирования последовательности испускания значений.
Новый — ещё не проверен сообществом
Вы