Sobes.tech
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 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
}