Eventi una tantum con i Channel
Distribuisca in sicurezza eventi di navigazione e toast.
Eventi una tantum con i Channel è una lezione Jetpack Compose Academy gratuita su CoddyKit. Questa è la lezione 4 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.
Lo stato non è un evento
Alcune azioni dovrebbero verificarsi una sola volta, come la navigazione o la visualizzazione di un toast. Modellarle come state fa sì che vengano ripetute a ogni rotazione.
Il problema della ripetizione
Se memorizza un messaggio per uno snackbar in StateFlow, una modifica della configurazione lo legge di nuovo e il messaggio viene visualizzato inaspettatamente un’altra volta.
Ecco Channel
Un Channel è un canale hot in cui ogni valore viene consegnato a un solo ricevitore e poi consumato, senza mai essere ripetuto.
private val _events = Channel<UiEvent>()Send contro Emit
Inserisca valori in un Channel con send, una chiamata sospendibile. L’evento resta nel buffer finché qualcosa non è pronto a riceverlo.
_events.send(UiEvent.NavigateBack)Esponga un Flow
Trasformi il channel in un flusso per l’interfaccia con receiveAsFlow, che consente a un solo collector di consumare ogni evento.
val events = _events.receiveAsFlow()Consumato una volta, per sempre
Quando un collector preleva un evento dal Channel, l’evento scompare. Una rotazione successiva non può leggerlo di nuovo, evitando così ripetizioni accidentali.
Modelli gli eventi come tipo
Definisca un tipo sealed UiEvent, così ogni azione singola, come la navigazione o i messaggi, è esplicita e gestita in modo esaustivo.
sealed interface UiEvent {
data class ShowToast(val msg: String) : UiEvent
}Raccolga gli eventi in Compose
Raccolga il flusso degli eventi all’interno di un LaunchedEffect, così viene collegato al ciclo di vita della schermata e ogni gestore viene eseguito una sola volta per evento.
LaunchedEffect(Unit) {
events.collect { handle(it) }
}Scelga la policy del buffer
Un Channel predefinito sospende il mittente se nessuno riceve. Può assegnargli un buffer, così le operazioni di invio non bloccano mai la logica.
Channel<UiEvent>(Channel.BUFFERED)SharedFlow è un’alternativa
Anche uno SharedFlow con replay zero può trasportare eventi, ma un Channel garantisce la consegna singola anche quando non è presente alcun collector attivo.
Tenga separati stato ed eventi
Il modello più chiaro è il seguente: uno StateFlow per lo stato della schermata e un Channel per gli eventi da attivare una sola volta. Non verranno più confusi.
Verifica rapida
Decida cosa è adatto a un’azione singola.
Riepilogo: eventi singoli
Fantastico! Un Channel consegna una sola volta eventi come la navigazione e i toast, tenendoli separati dallo stato della schermata, che può essere ripetuto. 🎯
Domande Frequenti
La lezione «Eventi una tantum con i Channel» è gratuita?
Sì — il testo completo di «Eventi una tantum con i Channel» è 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 «Eventi una tantum con i Channel»?
Distribuisca in sicurezza eventi di navigazione e toast. 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 4 di 4.
Quanto tempo richiede la lezione «Eventi una tantum con i Channel»?
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
- StateFlow e SharedFlow a confronto
- Mappare e combinare i Flow
- stateIn e WhileSubscribed
- Eventi una tantum con i Channel