Переживает ли ViewModel смену конфигурации в Android-приложении

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

Ответ

Да, ViewModel сохраняется при смене конфигурации (например, повороте экрана). Это одно из ключевых преимуществ ViewModel перед обычными Activity/Fragment. ViewModel хранится в памяти до тех пор, пока связанный с ним scope (Activity/Fragment) полностью не завершится.

Пример:

class MyViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// В Activity
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
viewModel.data.observe(this) { value ->
    // Обновляем UI
}

При повороте экрана Activity уничтожается и создается заново, но тот же экземпляр ViewModel будет переиспользован. Однако ViewModel не сохраняет данные при убийстве процесса системой - для этого нужно использовать SavedStateHandle или onSaveInstanceState.