Назад к вопросам
Middle
87
questionbank

Как сохранить состояние ViewModel в архитектурных компонентах Android?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Для сохранения состояния ViewModel, которое переживет уничтожение процесса, используется SavedStateHandle.

SavedStateHandle представляет собой Map-подобное хранилище, связанное с сохраненным состоянием Activity или Fragment.

Принцип работы:

  1. ViewModel получает SavedStateHandle как параметр конструктора.
  2. Данные сохраняются в SavedStateHandle с помощью метода set().
  3. При восстановлении Activity/Fragment, сохраненные данные автоматически доступны в SavedStateHandle ViewModel, который создастся заново.

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

class MyViewModel(private val state: SavedStateHandle) : ViewModel() {

    private val _myValue = state.getLiveData<String>("myKey")
    val myValue: LiveData<String> get() = _myValue

    fun saveValue(newValue: String) {
        state.set("myKey", newValue)
    }
}

SavedStateHandle поддерживает сохранение примитивных типов, таких как Int, String, Boolean, а также parcelable и serializable объекты.

Важно понимать, что SavedStateHandle предназначен для сохранения небольшого количества UI-связанных данных. Для сохранения более сложных или больших объемов данных следует использовать другие механизмы, такие как Room Database или DataStore.