Ответ
StateFlow и SharedFlow ведут себя по-разному при изменении конфигурации:
StateFlow
Сохраняет свое состояние (последнее emitted значение) и продолжает работу после изменения конфигурации. Подписчики получат последнее значение при повторной подписке.
val stateFlow = MutableStateFlow(0) // сохранит значение при повороте
SharedFlow
Не хранит состояние (если не используется replay). При изменении конфигурации:
- Теряет все не доставленные события
- Новые подписчики не получат старые значения (если replay = 0)
- Можно использовать
replayдля кэширования N последних значений
val sharedFlow = MutableSharedFlow<Int>(replay = 1) // сохранит 1 последнее значение
Для обоих случаев поток продолжает работать в фоне, но подписки View будут пересозданы.