Sobes.tech
Middle

Как да запазите състоянието на ViewModel в архитектурните компоненти на Android?

sobes.tech AI

Отговор от 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.