Ответ
Jetpack ViewModel предоставляет несколько инструментов для работы с данными и состоянием:
- LiveData – поток данных с жизненным циклом, автоматически уведомляет UI об изменениях:
val liveData = MutableLiveData<String>()
liveData.observe(viewLifecycleOwner) { value ->
updateUI(value)
}
- StateFlow/SharedFlow – Kotlin-корутиновые альтернативы LiveData:
val state = MutableStateFlow("Initial")
state.collectLatest { value ->
updateUI(value)
}
- SavedStateHandle – сохранение состояния при повороте/уничтожении процесса:
class MyViewModel(savedState: SavedStateHandle) : ViewModel() {
val state = savedState.getLiveData<String>("key")
}
- ViewModelScope – автоматически отменяемые корутины, привязанные к жизненному циклу ViewModel:
viewModelScope.launch {
fetchData()
}
Для сложных состояний часто используют комбинацию StateFlow + Data classes (sealed classes для UI состояний). ViewModel идеально подходит для хранения и управления UI-состоянием, изолируя его от конфигурационных изменений.