Sobes.tech
Junior — Middle

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.