Sobes.tech
Back to questions
Junior — Middle
67

Каким образом Android реализует механизм сохранения состояния ViewModel при изменениях конфигурации или в процессе жизненного цикла?

Answer from AI

sobes.tech AI

В Android ViewModel предназначена для хранения и управления UI-данными с учётом жизненного цикла. При изменениях конфигурации (например, поворот экрана) система уничтожает Activity или Fragment, но ViewModel сохраняется и повторно предоставляется новым экземплярам.

Это достигается через ViewModelProvider, который привязывает ViewModel к жизненному циклу компонента. ViewModel хранится в памяти, пока связан с жизненным циклом владельца (Activity/Fragment). При уничтожении компонента из-за изменения конфигурации ViewModel не уничтожается, а повторно используется новым экземпляром.

Для сохранения состояния внутри ViewModel можно использовать SavedStateHandle — специальный объект, который позволяет сохранять и восстанавливать данные при уничтожении процесса или других ситуациях, выходящих за рамки обычного изменения конфигурации.

Пример использования SavedStateHandle:

class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
    var counter: Int
        get() = state.get<Int>("counter") ?: 0
        set(value) = state.set("counter", value)
}

Таким образом, ViewModel сохраняет данные в памяти при изменениях конфигурации, а SavedStateHandle помогает сохранить состояние при более серьёзных событиях, например, при уничтожении процесса.