Как ViewModel может пережить поворот экрана

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

Ответ

ViewModel сохраняется при повороте экрана благодаря механизму ViewModelStore, который хранится в компоненте Activity/Fragment. При изменении конфигурации (например, повороте) Activity уничтожается и создается заново, но ViewModelStore сохраняется системой через onRetainNonConfigurationInstance() (для Activity) или setRetainInstance(true) (для Fragment). Когда новая Activity запрашивает ViewModel через ViewModelProvider, он проверяет ViewModelStore и возвращает существующий экземпляр.

Пример:

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

// В Activity/Fragment:
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)