Sobes.tech
Middle

Qual é a diferença entre fluxos quentes e frios?

sobes.tech IA

Resposta da IA

Fluxes quentes (Hot):

  • Ativos independentemente da presença de observadores.
  • Sempre fornecem os últimos dados disponíveis aos assinantes desde o momento da assinatura.
  • Exemplos: LiveData, StateFlow, SharedFlow.

Fluxos frios (Cold):

  • Ativos apenas quando há pelo menos um observador.
  • Executam a lógica a cada nova assinatura.
  • Exemplos: Flow, Sequence.

StateFlow é um SharedFlow especializado que lembra o último valor. SharedFlow pode ser configurado para funcionar como um StateFlow com um buffer de replay=1.

Diferenças principais:

Operação Fluxo quente Fluxo frio
Atividade Sempre Com assinatura
Execução de lógica Uma vez A cada assinatura
Memorização de estado Sim (LiveData, StateFlow, SharedFlow com replay) Não (padrão)
Multiusuário Sim Não (cada assinante recebe uma cópia separada)

Fluxos quentes são usados para representar o estado da interface do utilizador ou dados partilhados. Fluxos frios são usados para realizar operações na assinatura, como pedidos de rede ou consultas à base de dados.

Exemplo de fluxo frio:

// Este fluxo carregará dados apenas se houver um assinante
fun loadData(): Flow<Data> = flow {
    // Aqui ocorre o carregamento de dados
    emit(NetworkApi.getData())
}

Exemplo de fluxo quente (StateFlow):

// Este fluxo sempre tem um valor e está disponível para assinatura
val uiState: StateFlow<UiState> = MutableStateFlow(LoadingUiState)

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