Sobes.tech
Junior — Middle

Kaip Android įgyvendina ViewModel būsenos išsaugojimo mechanizmą keičiant konfigūraciją ar gyvenimo ciklo metu?

sobes.tech AI

Atsakymas iš AI

Android'e ViewModel skirtas saugoti ir valdyti UI duomenis, atsižvelgiant į gyvenimo ciklą. Konfigūracijos pakeitimų metu (pvz., ekrano pasukimo) sistema naikina Activity arba Fragment, tačiau ViewModel išlieka saugomas ir yra priskiriamas naujoms instancijoms.

Tai pasiekiama per ViewModelProvider, kuris susieja ViewModel su komponento gyvenimo ciklu. ViewModel lieka atmintyje, kol yra susietas su savininko (Activity/Fragment) gyvenimo ciklu. Kai komponentas yra sunaikinamas dėl konfigūracijos pakeitimo, ViewModel nėra sunaikinamas, o naudojamas iš naujo naujoje instancijoje.

Norint išsaugoti būseną viduje ViewModel, galima naudoti SavedStateHandle — specialų objektą, kuris leidžia išsaugoti ir atkurti duomenis, kai procesas yra sunaikinamas arba kitose situacijose, kurios viršija įprastą konfigūracijos keitimą.

SavedStateHandle naudojimo pavyzdys:

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

Taip ViewModel išsaugo duomenis atmintyje konfigūracijos keitimo metu, o SavedStateHandle padeda išsaugoti būseną rimtesnių įvykių metu, pavyzdžiui, proceso sunaikinimo atveju.