Как Andriod обеспечивает сохранение ViewModel

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

Ответ

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

Для сохранения данных при process death используйте SavedStateHandle:

class MyViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
    val liveData = savedStateHandle.getLiveData<String>("key")

    fun saveData(value: String) {
        savedStateHandle["key"] = value
    }
}

Ключевые моменты:

  • ViewModel переживает поворот экрана
  • Не сохраняется при finish() или системном убийстве процесса
  • Для постоянного хранения нужен SavedStateHandle или другие механизмы (Room, DataStore)