Sobes.tech
Junior — Middle

Come si differenziano Flow, StateFlow e SharedFlow nel contesto della programmazione reattiva?

sobes.tech AI

Risposta dell'AI

Nel contesto della programmazione reattiva in Kotlin (specialmente su Android), Flow, StateFlow e SharedFlow sono diversi tipi di flussi di dati con proprietà differenti:

  • Flow: è un flusso freddo che inizia a emettere dati solo quando ci si iscrive. Ogni sottoscrittore riceve i dati dall'inizio, e i dati non vengono conservati tra le sottoscrizioni.

  • StateFlow: è un flusso caldo che mantiene sempre lo stato corrente (valore). Quando ci si iscrive, il sottoscrittore riceve immediatamente l'ultimo valore, e poi tutti gli aggiornamenti successivi. Viene usato per rappresentare uno stato che può cambiare nel tempo.

  • SharedFlow: è un flusso caldo che può avere più sottoscrittori e non conserva lo stato di default (ma può essere configurato con un buffer e una retransmissione). Permette di trasmettere eventi a più sottoscrittori senza conservare l'ultimo valore.

Esempio:

val flow = flow {
    emit(1)
    delay(1000)
    emit(2)
}

val stateFlow = MutableStateFlow(0)
stateFlow.value = 1

val sharedFlow = MutableSharedFlow<Int>()
sharedFlow.emit(1)
  • Flow è adatto per calcoli sequenziali e flussi di dati one-shot.
  • StateFlow per memorizzare e osservare lo stato.
  • SharedFlow per eventi che devono essere trasmessi a più ascoltatori, come la navigazione o i messaggi.