Найти в Дзене
4 подписчика

​​Kotlin Flow: StateFlow vs SharedFlow


Часть №1

Сначала общие факты для понимания задумки авторов библиотеки Kotlin Flow:

• Flow (потоки) — никак не связаны с Android

это библиотека котлина, которая завязано только на корутины (которые тоже являются библиотекой, не связанной с Android SDK)

• основные методы:

collect() - подписаться на данные из потока

emit() - положить значение в поток

• холодный поток — запускает создание элементов каждый раз при вызове collect()

при объявление потока описывается функция-билдер новых элементов, внутри которого вызывается emit()

то есть для каждого подписчика свой поток данных

• горячий поток — не зависит от вызова collect()

то есть для каждого подписчика один и тот же поток данных

• если корутина, запустившая холодный поток, остановлена — поток тоже остановится

но только если внутри есть проверка флага isActive

• collect() и emit() — suspend-функции, выполнение корутины не продолжится, пока они не завершатся

collect() приостанавливает корутину до завершения потока данных

emit() приостанавливает корутину до момента, пока поток данных не будет готов принять элемент (освободится буфер)

• CoroutineContext определяется родительской корутиной, вызвавшей collect(). но его можно сменить с помощью оператора flowOn(CouroutineContext)

например, можно получать элементы из Flow в главном потоке, а выполнять их создание в бэкграунде

• зачем нужен буфер?

если речь идет о холодном потоке, то буфер помогает выполнить emit(), не дожидаясь завершения collect()

если речь идет о горячем потоке, то буфер определяет, сколько последних элементов получит новый подписчик, вызвавший collect()
​​Kotlin Flow: StateFlow vs SharedFlow Часть №1 Сначала общие факты для понимания задумки авторов библиотеки Kotlin Flow: • Flow (потоки) — никак не связаны с Android это библиотека котлина, которая
1 минута