Общее для StateFlow и SharedFlow:
• это горячие потоки
то есть вызов collect() лишь позволяет собрать данные, которые уже в них есть или поступят в них, но не запускает выполнение какого-либо билдера (как это происходит с холодными потоками)
• они не отслеживает жизненный цикл активити\фрагмента\вьюшки
но их можно запустить в корутинах, которые автоматически остановятся во время вызова onStop(). остановка \корутины вызывает остановку выполнения collect()
Отличия StateFlow и SharedFlow:
• при создании StateFlow нужно указать начальное значение, а при создании SharedFlow — нет
• у SharedFlow можно настроить вместимость буфера, у StateFlow хранится только 1 последний элемент
У SharedFlow два буфера — replayBuffer и extraBuffer:
• replay — сколько новый подписчик, вызвавший collect(), получит последних выпущенных элементов
• extraBuffer — сколько дополнительно элементов сохранится для "медленного" подписчика, который не успевает выполнять collect()
этот буфер работает в сл