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
}