Какие знаешь инструменты Jetpack ViewModel для работы с данными и состоянием

«Какие знаешь инструменты Jetpack ViewModel для работы с данными и состоянием» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Jetpack ViewModel предоставляет несколько инструментов для работы с данными и состоянием:

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

Для сложных состояний часто используют комбинацию StateFlow + Data classes (sealed classes для UI состояний). ViewModel идеально подходит для хранения и управления UI-состоянием, изолируя его от конфигурационных изменений.