SharedFlow - это поток данных из coroutines, который рассылает значения нескольким подписчикам ("hot" поток).
StateFlow - это вариация SharedFlow, представляющая поток состояний. Всегда имеет начальное значение и рассылает последнее известное значение новым подписчикам.
Основные отличия:
| Характеристика | SharedFlow | StateFlow |
|---|---|---|
| Начальное значение | Не имеет по умолчанию, можно задать replay | Всегда имеет обязательное начальное значение |
| Повтор значений для новых подписчиков | Управляется параметром replay | Всегда повторяет последнее значение |
| Буфер значений | Размер буфера задается параметром extraBufferCapacity | Размер буфера - 0 (за исключением последнего значения) |
| Эмиссия одинаковых значений | Эмитирует все значения, даже если они одинаковы | Не эмитирует одинаковые последовательные значения (если они равны по .equals()) |
| Use case | События, стримы данных | Состояния UI или другие текущие состояния |