Sobes.tech
Middle

Qual è la differenza tra flussi caldi e freddi?

sobes.tech AI

Risposta dell'AI

Flussi caldi (Hot):

  • Attivi indipendentemente dalla presenza di osservatori.
  • Forniscono sempre i dati più recenti disponibili agli abbonati dal momento dell'iscrizione.
  • Esempi: LiveData, StateFlow, SharedFlow.

Flussi freddi (Cold):

  • Attivi solo quando c'è almeno un osservatore.
  • Eseguono la logica ad ogni nuova iscrizione.
  • Esempi: Flow, Sequence.

StateFlow è uno SharedFlow specializzato che memorizza l'ultimo valore. SharedFlow può essere configurato per funzionare come un StateFlow con un buffer di replay=1.

Differenze chiave:

Operazione Flusso caldo Flusso freddo
Attività Sempre Alla sottoscrizione
Esecuzione della logica Una sola volta Ad ogni sottoscrizione
Memorizzazione dello stato Sì (LiveData, StateFlow, SharedFlow con replay) No (predefinito)
Multiutente No (ogni sottoscrittore riceve una copia separata)

I flussi caldi sono usati per rappresentare lo stato dell'interfaccia utente o dati condivisi. I flussi freddi sono usati per eseguire operazioni alla sottoscrizione, come richieste di rete o query al database.

Esempio di flusso freddo:

// Questo flusso caricherà i dati solo se c'è un sottoscrittore
fun loadData(): Flow<Data> = flow {
    // Qui avviene il caricamento dei dati
    emit(NetworkApi.getData())
}

Esempio di flusso caldo (StateFlow):

// Questo flusso ha sempre un valore ed è disponibile per la sottoscrizione
val uiState: StateFlow<UiState> = MutableStateFlow(LoadingUiState)

fun updateState(newState: UiState) {
    uiState.value = newState
}