Ответ
Для сохранения состояния в Android лучше использовать StateFlow или SharedFlow из Kotlin Coroutines.
StateFlow – идеален для хранения UI-состояния:
- Хранит текущее значение (initial state)
- Автоматически эмитит последнее значение новым подписчикам
- Потоково-безопасен (thread-safe)
private val _uiState = MutableStateFlow<UiState>(UiState.Loading)
val uiState: StateFlow<UiState> = _uiState.asStateFlow()
// Обновление состояния
_uiState.value = UiState.Success(data)
SharedFlow – когда нужно:
- Кэшировать несколько событий (replay = n)
- Обрабатывать одноразовые события (например, навигация/тосты)
- Не хранить начальное состояние
private val _events = MutableSharedFlow<Event>()
val events = _events.asSharedFlow()
// Эмит события
_events.tryEmit(Event.ShowToast("Saved"))
Для ViewModel используйте stateIn с начальным состоянием:
val state = flow.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000),
initialValue = LoadingState
)