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.