0Pricing
Android Academy · Lezione

viewModelScope e Dispatchers

Esegua il lavoro sul thread corretto.

viewModelScope e Dispatchers è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Scope consapevoli del ciclo di vita

Android offre scope integrati che si annullano automaticamente:

  • viewModelScope — viene annullato quando il ViewModel viene eliminato.
  • lifecycleScope — è associato al ciclo di vita di un'Activity o di un Fragment.

Usare viewModelScope

Avvii le attività sui dati in viewModelScope. Quando il ViewModel viene eliminato, la coroutine viene annullata automaticamente: non è necessaria alcuna pulizia manuale.

class UserViewModel(
    private val repo: UserRepository
) : ViewModel() {
    fun load() {
        viewModelScope.launch {
            val users = repo.getUsers()
            _uiState.value = UiState(users)
        }
    }
}

Perché non usare GlobalScope

Eviti GlobalScope: le sue coroutine vivono per l'intera durata dell'app e non sono mai associate a un ciclo di vita, causando perdite di memoria e attività che continuano dopo la scomparsa della schermata.

Che cosa sono i Dispatcher

Un Dispatcher decide su quale thread (o pool) viene eseguita una coroutine. Scegliere quello giusto mantiene libero il thread principale.

I Dispatcher standard

  • Dispatchers.Main — il thread dell'interfaccia utente.
  • Dispatchers.IO — per l'I/O di rete e del disco.
  • Dispatchers.Default — per le attività che richiedono molta CPU.

viewModelScope usa Main per impostazione predefinita

viewModelScope avvia le coroutine su Dispatchers.Main. Questo va bene per aggiornare lo stato, ma dovrebbe spostare altrove le attività pesanti.

Cambiare contesto con withContext

Usi withContext per eseguire un blocco su un dispatcher diverso e poi tornare al chiamante.

suspend fun loadFile(): String =
    withContext(Dispatchers.IO) {
        File("data.txt").readText()
    }

Funzioni sicure sul thread principale

Una funzione è sicura sul thread principale se può essere chiamata dal thread principale senza rischi, perché effettua internamente il cambio di contesto. I repository dovrebbero essere sicuri sul thread principale, così i chiamanti non devono preoccuparsi dei thread.

class Repo {
    suspend fun getUsers() =
        withContext(Dispatchers.IO) { dao.getAll() }
}

Room e Retrofit sono sicuri sul thread principale

Una buona notizia: i metodi DAO suspend di Room e le chiamate suspend di Retrofit vengono già eseguiti fuori dal thread principale. In genere non è necessario usare esplicitamente withContext per queste operazioni.

Attività della CPU su Default

Per calcoli pesanti, come ordinare un elenco enorme o analizzare dati, usi Dispatchers.Default per evitare rallentamenti dell'interfaccia utente.

val sorted = withContext(Dispatchers.Default) {
    bigList.sortedBy { it.score }
}

Iniettare i Dispatcher

Per facilitare i test, inietti i dispatcher invece di codificarli direttamente. In questo modo i test possono sostituirli con un dispatcher di test.

class Repo(
    private val io: CoroutineDispatcher = Dispatchers.IO
) {
    suspend fun load() = withContext(io) { /* ... */ }
}

Verifica rapida

Verifichi la Sua comprensione degli scope e dei dispatcher.

Riepilogo

Ha imparato a:

  • Usare viewModelScope, che annulla le coroutine quando il ViewModel viene eliminato.
  • Evitare GlobalScope.
  • Scegliere i dispatcher: Main (interfaccia utente), IO (rete/disco), Default (CPU).
  • Usare withContext per cambiare thread e puntare a funzioni sicure sul thread principale.

Domande Frequenti

La lezione «viewModelScope e Dispatchers» è gratuita?

Sì — il testo completo di «viewModelScope e Dispatchers» è 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 «viewModelScope e Dispatchers»?

Esegua il lavoro sul thread corretto. 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 2 di 4.

Quanto tempo richiede la lezione «viewModelScope e Dispatchers»?

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. Nozioni di base e scope delle coroutine
  2. viewModelScope e Dispatchers
  3. Nozioni di base su Kotlin Flow
  4. StateFlow e SharedFlow
← Torna a Android Academy