Описание: Этот вопрос проверяет знание разницы между двумя основными видами Flow, их областями применения и принципами подписки.
StateFlow хранит последнее значение и всегда возвращает его новым подписчикам. Он похож на "живое состояние". SharedFlow не хранит состояние по умолчанию, а работает как "событийный поток", где данные могут быть потеряны, если никто не слушает. В целом: StateFlow используют для состояния экрана, SharedFlow — для одноразовых событий.
StateFlow — поток, который всегда хранит последнее значение и гарантирует его доставку подписчикам.
SharedFlow — поток для широковещательной передачи данных многим подписчикам без гарантии хранения состояния.
Хранение состояния
StateFlow хранит текущее значение (value) и отдаёт его каждому новому подписчику.
SharedFlow по умолчанию не хранит ничего, но можно настроить replay.
Использование
StateFlow: отображение состояния экрана, например: загрузка, данные, ошибка.
SharedFlow: события типа "показать тост", "навигация на другой экран".
Подписчики
StateFlow может иметь от 0 и более подписчиков.
SharedFlow также работает с любым количеством подписчиков.
// StateFlow — состояние
val uiState = MutableStateFlow("Loading...")
uiState.value = "Data loaded"
// SharedFlow — событие
val events = MutableSharedFlow<String>()
events.emit("Show toast")
Используйте StateFlow для управления состоянием.
Используйте SharedFlow для событий, которые не должны храниться.
Ключевые слова: flow, state flow, shared flow, event, state