StateFlow y SharedFlow
Exponga el estado reactivo de su aplicación
StateFlow y SharedFlow es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.
Flows calientes
A diferencia de los flows fríos, StateFlow y SharedFlow son calientes: existen independientemente de los recopiladores y se pueden compartir entre varios.
StateFlow es un contenedor de estado
Un StateFlow siempre contiene un valor actual. Los nuevos recopiladores reciben inmediatamente el valor más reciente. Es ideal para el estado de la interfaz.
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()Actualizar StateFlow
Establezca .value directamente o use update para realizar una operación atómica de lectura, modificación y escritura.
_count.value++
// or, atomically:
_count.update { it + 1 }StateFlow combina y elimina duplicados
StateFlow solo conserva el valor más reciente (combinación) y no emite nada si el nuevo valor es igual al anterior. Esto evita actualizaciones innecesarias de la interfaz.
SharedFlow para eventos
Un SharedFlow no necesita tener un valor actual y puede reproducir un número configurable de emisiones anteriores. Es adecuado para eventos puntuales, como la navegación o mostrar un snackbar.
private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()Emitir eventos
Emita en un SharedFlow desde una corrutina.
fun onSave() {
viewModelScope.launch {
_events.emit("Saved!")
}
}Por qué no usar StateFlow para eventos
StateFlow conserva el último valor, por lo que un recopilador que vuelva a suscribirse (después de una rotación) recibiría de nuevo el evento anterior y, por ejemplo, navegaría dos veces. SharedFlow evita reproducir eventos de forma predeterminada.
Configurar SharedFlow
Ajuste replay y extraBufferCapacity para controlar el almacenamiento en búfer y el comportamiento de la contrapresión.
MutableSharedFlow<String>(
replay = 0,
extraBufferCapacity = 1
)Convertir un Flow frío en StateFlow
Use stateIn para convertir un flujo ascendente frío en un StateFlow compartido con un alcance asociado al ViewModel.
val uiState = repo.stream()
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Elegir entre ambos
- StateFlow → estado actual de la pantalla (siempre tiene un valor).
- SharedFlow → eventos transitorios (se ejecutan una vez).
Recopilar ambos
Recopile StateFlow con collectAsStateWithLifecycle en Compose; recopile los eventos de SharedFlow dentro de un LaunchedEffect para gestionarlos una sola vez.
LaunchedEffect(Unit) {
vm.events.collect { msg -> showSnackbar(msg) }
}Comprobación rápida
Compruebe cuánto ha comprendido sobre StateFlow y SharedFlow.
Resumen
Ha aprendido lo siguiente:
- StateFlow es un contenedor de estado activo y con conflación que tiene un valor actual.
- SharedFlow es un flujo de eventos activo con repetición configurable.
- Use StateFlow para el estado y SharedFlow para eventos puntuales.
stateInconvierte flujos fríos en StateFlow.
Preguntas frecuentes
¿La lección «StateFlow y SharedFlow» es gratis?
Sí — el texto completo de «StateFlow y SharedFlow» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.
¿Qué aprenderé en «StateFlow y SharedFlow»?
Exponga el estado reactivo de su aplicación Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Android Academy?
No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «StateFlow y SharedFlow»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Android Academy?
Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos y ámbitos de las corrutinas
- viewModelScope y Dispatchers
- Conceptos básicos de Kotlin Flow
- StateFlow y SharedFlow