Сначала общие факты для понимания задумки авторов библиотеки Kotlin Flow:
• Flow (потоки) — никак не связаны с Android
это библиотека котлина, которая завязано только на корутины (которые тоже являются библиотекой, не связанной с Android SDK)
• основные методы:
collect() - подписаться на данные из потока
emit() - положить значение в поток
• холодный поток — запускает создание элементов каждый раз при вызове collect()
при объявление потока описывается функция-билдер новых элементов, внутри которого вызывается emit()
то есть для каждого подписчика свой поток данных
• горячий поток — не зависит от вызова collect()
то есть для каждого подписчика один и тот же поток данных
• если корутина, запустившая холодный поток, остановлена — поток тоже остановится
но только если внутри есть проверка флага isActive
• collect() и emit() — suspend-функции, выполнение корутины не продолжится, пока они не завершатся
collect() приостанавливает корутину до завершения потока данных
emit() пр