Sobes.tech
Junior — Middle

Kako Android implementira mehanizam čuvanja stanja ViewModel tokom promena konfiguracije ili u toku životnog ciklusa?

sobes.tech АИ

Одговор од АИ

U Androidu, ViewModel je namenjen za skladištenje i upravljanje podacima korisničkog interfejsa uzimajući u obzir životni ciklus. Prilikom promena konfiguracije (npr. rotacija ekrana), sistem uništava Activity ili Fragment, ali ViewModel ostaje sačuvan i ponovo dodeljuje se novim instancama.

Ovo se postiže putem ViewModelProvider, koji povezuje ViewModel sa životnim ciklusom komponente. ViewModel ostaje u memoriji dok je povezan sa životnim ciklusom vlasnika (Activity/Fragment). Kada se komponenta uništi zbog promene konfiguracije, ViewModel se ne uništava, već se ponovo koristi u novoj instanci.

Za čuvanje stanja unutar ViewModel-a, može se koristiti SavedStateHandle, poseban objekat koji omogućava čuvanje i obnavljanje podataka u slučaju uništavanja procesa ili drugih situacija koje prevazilaze običnu promenu konfiguracije.

Primer korišćenja SavedStateHandle:

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

Na ovaj način, ViewModel čuva podatke u memoriji tokom promena konfiguracije, a SavedStateHandle pomaže da se sačuva stanje u ozbiljnijim događajima, poput uništavanja procesa.