Jetpack Compose Academy · Lezione

stateIn e WhileSubscribed

Memorizzi nella cache i flussi e interrompa il lavoro quando nessuno ascolta.

Lezione 3 di 413 passaggi

stateIn e WhileSubscribed è una lezione Jetpack Compose Academy gratuita su CoddyKit. Questa è la lezione 3 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 Jetpack Compose Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Jetpack Compose Academy include 4 lezioni in totale.

Da Cold Flow a Hot State

Lo stato dell’interfaccia dovrebbe essere hot e memorizzato nella cache, ma i flussi trasformati sono cold. L’operatore stateIn converte un cold flow in uno StateFlow.

Cosa fa stateIn

stateIn avvia il flusso a monte in uno scope, condivide una singola raccolta tra tutti i collector e memorizza nella cache l’ultimo valore per i nuovi collector.

val ui = source.stateIn(
    viewModelScope, started, initial)

Richiede uno scope

Il primo argomento è uno scope, in genere viewModelScope, che collega il flusso in esecuzione al ciclo di vita del ViewModel.

flow.stateIn(viewModelScope, ...)

Richiede un valore iniziale

Poiché uno StateFlow contiene sempre un valore, stateIn ne richiede uno iniziale da mostrare prima che arrivi la prima emissione reale.

flow.stateIn(scope, started,
    initialValue = UiState.Loading)

La strategia di condivisione

L’argomento centrale è la policy SharingStarted. Stabilisce esattamente quando il flusso a monte inizia e smette di essere eseguito.

Eagerly e Lazily

SharingStarted.Eagerly avvia immediatamente il flusso e non lo arresta mai, mentre Lazily lo avvia con il primo collector e poi continua a eseguirlo.

started = SharingStarted.Eagerly

Ecco WhileSubscribed

WhileSubscribed esegue il flusso a monte solo finché è presente almeno un collector attivo, poi lo arresta quando l’ultimo collector si disconnette.

started = SharingStarted.WhileSubscribed()

Il timeout di cinque secondi

Passare un timeout breve a WhileSubscribed mantiene attivo il flusso per un breve periodo dopo la disconnessione dell’ultimo collector, superando così le rotazioni rapide.

SharingStarted.WhileSubscribed(5000)

Perché il timeout è utile

Durante la rotazione dello schermo il vecchio collector si disconnette e un nuovo collector arriva pochi istanti dopo. Il timeout evita un riavvio superfluo nel frattempo.

Evita il lavoro inutile

Con WhileSubscribed un flusso proveniente dal database o dalla rete viene messo in pausa quando lo schermo è spento e riprende quando l’utente torna. Un vantaggio per la batteria. 🔋

Una ricetta completa con stateIn

Metta tutto insieme: trasformi i dati, poi chiami stateIn con lo scope, WhileSubscribed e uno stato iniziale di caricamento.

val ui = repo.flow().map { UiState(it) }
    .stateIn(viewModelScope,
        SharingStarted.WhileSubscribed(5000),
        UiState.Loading)

Verifica rapida

Ragioni sui cicli di vita gestiti dagli iscritti.

Riepilogo: stateIn e WhileSubscribed

Ben fatto! stateIn trasforma un cold flow in uno StateFlow memorizzato nella cache, mentre WhileSubscribed lo esegue solo quando viene osservato, evitando lavoro inutile. 🎯

Gratis per iniziare

Impara Kotlin con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «stateIn e WhileSubscribed» è gratuita?

Sì — il testo completo di «stateIn e WhileSubscribed» è 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 Jetpack Compose Academy, passa a CoddyKit PRO. Il corso Jetpack Compose Academy include 4 lezioni in totale.

Cosa imparerò in «stateIn e WhileSubscribed»?

Memorizzi nella cache i flussi e interrompa il lavoro quando nessuno ascolta. Eserciti Jetpack Compose 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 Jetpack Compose Academy?

Non è richiesta alcuna esperienza precedente. Jetpack Compose 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 3 di 4.

Quanto tempo richiede la lezione «stateIn e WhileSubscribed»?

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 Jetpack Compose Academy?

Sì. Ogni lezione Jetpack Compose 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. StateFlow e SharedFlow a confronto
  2. Mappare e combinare i Flow
  3. stateIn e WhileSubscribed
  4. Eventi una tantum con i Channel
← Torna a Jetpack Compose Academy