0Pricing
Android Academy · Lezione

Perché usare un ViewModel?

Gestisca correttamente le modifiche di configurazione.

Perché usare un ViewModel? è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 4 lezioni in totale.

Che cos'è un ViewModel?

Un ViewModel è un componente dell'architettura Android progettato per memorizzare e gestire dati relativi all'interfaccia utente in modo consapevole del ciclo di vita.

Sopravvive ai cambiamenti di configurazione, come la rotazione dello schermo, così i dati non vengono distrutti e ricreati ogni volta che il sistema ricostruisce l'interfaccia.

Il problema dei cambiamenti di configurazione

Quando ruota il dispositivo, Android distrugge e ricrea l'Activity. Qualsiasi stato contenuto nell'Activity o nel Composable va perso.

  • Un contatore si reimposta a zero.
  • Un elenco caricato scompare.
  • Una richiesta di rete potrebbe ripartire.

ViewModel risolve il problema vivendo al di fuori del ciclo di vita dell'istanza dell'Activity.

Come sopravvive un ViewModel

Il framework mantiene in vita la stessa istanza di ViewModel durante le ricreazioni. Quando viene creata la nuova Activity, le viene fornito il ViewModel esistente anziché uno nuovo.

class CounterViewModel : ViewModel() {
    var count = 0
        private set

    fun increment() {
        count++
    }
}

Ottenere un ViewModel in Compose

In Jetpack Compose, in genere si recupera un ViewModel con l'helper viewModel(). Restituisce la stessa istanza per il proprietario del ciclo di vita.

import androidx.lifecycle.viewmodel.compose.viewModel

@Composable
fun CounterScreen(
    vm: CounterViewModel = viewModel()
) {
    Text("Count: " + vm.count)
}

Separazione delle responsabilità

Un ViewModel favorisce una separazione chiara:

  • Livello UI (Composable/Activity) esegue il rendering dello stato e inoltra gli eventi.
  • ViewModel contiene lo stato e la logica di business.

In questo modo l'interfaccia rimane più semplice e la logica è più facile da testare.

Ambito e proprietario del ViewModel

Un ViewModel è associato all'ambito di un ViewModelStoreOwner, solitamente un'Activity, un Fragment o una voce dello stack di ritorno della navigazione.

Viene cancellato automaticamente quando il proprietario viene distrutto definitivamente, ad esempio quando l'utente chiude l'Activity premendo il pulsante Indietro.

Il callback onCleared

Quando il ViewModel viene infine distrutto, il framework chiama onCleared(). Lo utilizzi per rilasciare le risorse aperte.

class MyViewModel : ViewModel() {
    override fun onCleared() {
        super.onCleared()
        // cancel jobs, close listeners
    }
}

Cosa NON inserire in un ViewModel

Non conservi mai riferimenti a View, Activity o qualsiasi Context associato all'interfaccia utente all'interno di un ViewModel. Poiché il ViewModel vive più a lungo dell'Activity, ciò causa memory leak.

Se ha bisogno del context dell'applicazione, utilizzi invece AndroidViewModel.

AndroidViewModel per il context dell'app

Quando ha realmente bisogno di un Context, estenda AndroidViewModel, che fornisce in modo sicuro il context dell'applicazione, a lunga durata.

class PrefsViewModel(
    app: Application
) : AndroidViewModel(app) {
    private val context = getApplication<Application>()
}

Passare argomenti al costruttore

Per iniettare dipendenze, come un repository, in un ViewModel, utilizzi un ViewModelFactory o un framework DI come Hilt. Hilt verrà trattato più avanti in questo percorso.

class UserViewModel(
    private val repo: UserRepository
) : ViewModel() {
    // repo provided via a factory or Hilt
}

Perché i ViewModel sono importanti

I ViewModel sono un pilastro dell'architettura Android moderna. Offrono:

  • Sopravvivenza ai cambiamenti di configurazione.
  • Una separazione chiara tra interfaccia e logica.
  • Una gestione dello stato prevedibile e verificabile.

Verifica rapida

Verifichi la sua comprensione del motivo per cui si utilizzano i ViewModel.

Riepilogo

Ha imparato che:

  • Un ViewModel memorizza lo stato dell'interfaccia e sopravvive ai cambiamenti di configurazione.
  • Non deve mai contenere riferimenti a View o Activity, per evitare perdite di memoria.
  • È associato all'ambito di un proprietario e viene cancellato tramite onCleared().
  • AndroidViewModel fornisce un Context sicuro dell'applicazione.

Domande Frequenti

La lezione «Perché usare un ViewModel?» è gratuita?

Sì — il testo completo di «Perché usare un ViewModel?» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 4 lezioni in totale.

Cosa imparerò in «Perché usare un ViewModel?»?

Gestisca correttamente le modifiche di configurazione. Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Android Academy?

Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Perché usare un ViewModel?»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Android Academy?

Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché usare un ViewModel?
  2. Esporre lo stato dal ViewModel
  3. Il ciclo di vita di Android
  4. collectAsStateWithLifecycle
← Torna a Android Academy