Sobes.tech
Junior — Middle

Ako implementuje Android mechanizmus uchovávania stavu ViewModel pri zmenách konfigurácie alebo v priebehu životného cyklu?

sobes.tech AI

Odpoveď od AI

V Androide je ViewModel určený na ukladanie a správu údajov používateľského rozhrania s ohľadom na životný cyklus. Pri zmenách konfigurácie (napríklad otočenie obrazovky) systém zničí Activity alebo Fragment, ale ViewModel zostáva zachovaný a je znovu priradený novým inštanciám.

Toto sa dosahuje pomocou ViewModelProvider, ktorý viaže ViewModel na životný cyklus komponentu. ViewModel zostáva v pamäti, kým je spojený s životným cyklom vlastníka (Activity/Fragment). Keď je komponent zničený kvôli zmene konfigurácie, ViewModel sa nezničí, ale znovu sa používa v novej inštancii.

Na uloženie stavu vo vnútri ViewModelu možno použiť SavedStateHandle, špeciálny objekt, ktorý umožňuje ukladať a obnovovať údaje v prípade zničenia procesu alebo iných situácií, ktoré presahujú bežnú zmenu konfigurácie.

Príklad použitia SavedStateHandle:

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

Takto ViewModel uchováva údaje v pamäti počas zmien konfigurácie a SavedStateHandle pomáha zachovať stav pri závažnejších udalostiach, ako je zničenie procesu.