Sobes.tech
Junior — Middle

Hogyan valósítja meg az Android a ViewModel állapotának megőrzésének mechanizmusát konfigurációs változások vagy életciklus során?

sobes.tech MI

Válasz az MI-től

Androidban a ViewModel arra szolgál, hogy a UI-adatokat tárolja és kezelje a életciklus figyelembevételével. Konfigurációs változások (például képernyőforgatás) esetén a rendszer megsemmisíti az Activity vagy Fragment-et, de a ViewModel megmarad, és új példányoknak újra hozzárendelhető.

Ez a ViewModelProvider segítségével valósul meg, amely a ViewModel-t a komponens életciklusához köti. A ViewModel a tulajdonos (Activity/Fragment) életciklusához kapcsolódva marad memóriában. Amikor egy komponens a konfigurációs változás miatt megsemmisül, a ViewModel nem kerül megsemmisítésre, hanem új példányban újra felhasználásra kerül.

A ViewModel belső állapotának megőrzéséhez használható a SavedStateHandle, egy speciális objektum, amely lehetővé teszi adatok mentését és visszaállítását folyamat megsemmisítése vagy más, a szokásos konfigurációs változáson túlmutató helyzetek esetén.

A SavedStateHandle használatának példája:

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

Így a ViewModel a konfigurációs változások során adatokat tárol a memóriában, és a SavedStateHandle segít megőrizni az állapotot súlyosabb események, például a folyamat megsemmisítése esetén.