Проверяет знание способов шаринга Flow между потребителями.
stateIn превращает Flow в StateFlow, который хранит и сразу отдает последнее значение новым подписчикам, а sharedIn создаёт SharedFlow, мультикастящий эмиссии без сохранения предыдущего значения (если не задан replay). Оба проводят старт эмиссии при подписке и позволяют разделять один источник между несколькими сборщиками.
1. stateIn
Создаёт StateFlow с первоначальным значением
Хранит последний эмит
val state = sourceFlow.stateIn(scope, SharingStarted.Lazily, initial)2. sharedIn
Создаёт SharedFlow, может накапливать replay элементов
val shared = sourceFlow.shareIn(scope, SharingStarted.Eagerly, replay = 1)3. Отличия:
StateFlow всегда имеет текущее состояние
SharedFlow может не иметь значения до эмита
4. Применение:
stateIn — UI-состояние,
sharedIn — события и мультикаст потоков