Jak Android implementuje mechanismus uchovávání stavu ViewModel při změnách konfigurace nebo v průběhu životního cyklu?
sobes.tech AI
Odpověď od AI
V Androidu je ViewModel určen k ukládání a správě dat uživatelského rozhraní s ohledem na životní cyklus. Při změnách konfigurace (například otočení obrazovky) systém zničí aktivitu nebo fragment, ale ViewModel zůstává zachován a je znovu přiřazen novým instancím.
Toho je dosaženo pomocí ViewModelProvider, který váže ViewModel ke životnímu cyklu komponenty. ViewModel zůstává v paměti, dokud je spojen s životním cyklem vlastníka (Activity/Fragment). Při zničení komponenty kvůli změně konfigurace se ViewModel nezničí, ale znovu se používá v nové instanci.
Pro uchování stavu uvnitř ViewModelu lze použít SavedStateHandle, speciální objekt, který umožňuje ukládání a obnovu dat v případě zničení procesu nebo jiných situací přesahujících běžnou změnu konfigurace.
Příklad použití SavedStateHandle:
class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
var counter: Int
get() = state.get<Int>("counter") ?: 0
set(value) = state.set("counter", value)
}
Tímto způsobem ViewModel uchovává data v paměti při změnách konfigurace a SavedStateHandle pomáhá zachovat stav při závažnějších událostech, například při zničení procesu.