Sobes.tech
Junior — Middle

Come implementa Android il meccanismo di salvataggio dello stato di ViewModel durante le modifiche di configurazione o nel ciclo di vita?

sobes.tech AI

Risposta dell'AI

In Android, il ViewModel è progettato per memorizzare e gestire i dati dell'interfaccia utente tenendo conto del ciclo di vita. Quando ci sono cambiamenti di configurazione (ad esempio, la rotazione dello schermo), il sistema distrugge Activity o Fragment, ma il ViewModel rimane e viene riassociato alle nuove istanze.

Questo viene realizzato tramite ViewModelProvider, che collega il ViewModel al ciclo di vita del componente. Il ViewModel rimane in memoria finché è associato al ciclo di vita del proprietario (Activity/Fragment). Quando un componente viene distrutto a causa di un cambiamento di configurazione, il ViewModel non viene distrutto, ma riutilizzato in una nuova istanza.

Per salvare lo stato all'interno del ViewModel, si può usare SavedStateHandle, un oggetto speciale che permette di salvare e ripristinare dati in caso di distruzione del processo o altre situazioni che vanno oltre un semplice cambiamento di configurazione.

Esempio di utilizzo di SavedStateHandle:

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

In questo modo, il ViewModel conserva i dati in memoria durante i cambiamenti di configurazione, e SavedStateHandle aiuta a mantenere lo stato in eventi più gravi, come la distruzione del processo.