Middle
¿Cuál es la diferencia entre flujos calientes y fríos?
sobes.tech AI
Respuesta de la IA
Flujos calientes (Hot):
- Activos independientemente de la presencia de observadores.
- Siempre proporcionan los datos más recientes disponibles a los suscriptores desde el momento de la suscripción.
- Ejemplos:
LiveData,StateFlow,SharedFlow.
Flujos fríos (Cold):
- Solo activos cuando hay al menos un observador.
- Ejecutan la lógica en cada nueva suscripción.
- Ejemplos:
Flow,Sequence.
StateFlow es un SharedFlow especializado que recuerda el último valor.
SharedFlow puede configurarse para funcionar como un StateFlow con un búfer de replay=1.
Diferencias clave:
| Operación | Flujo caliente | Flujo frío |
|---|---|---|
| Actividad | Siempre | Con suscripción |
| Ejecución de lógica | Una sola vez | En cada suscripción |
| Recordatorio de estado | Sí (LiveData, StateFlow, SharedFlow con replay) | No (por defecto) |
| Multiusuario | Sí | No (cada suscriptor recibe una copia separada) |
Los flujos calientes se usan para representar el estado de la interfaz de usuario o datos compartidos. Los flujos fríos se usan para realizar operaciones en la suscripción, como solicitudes de red o consultas a bases de datos.
Ejemplo de flujo frío:
// Este flujo cargará datos solo si hay un suscriptor
fun loadData(): Flow<Data> = flow {
// Aquí se realiza la carga de datos
emit(NetworkApi.getData())
}
Ejemplo de flujo caliente (StateFlow):
// Este flujo siempre tiene un valor y está disponible para suscripción
val uiState: StateFlow<UiState> = MutableStateFlow(LoadingUiState)
fun updateState(newState: UiState) {
uiState.value = newState
}