0Pricing
Jetpack Compose Academy · Lección

stateIn y WhileSubscribed

Almacene en caché los flows y detenga el trabajo cuando nadie escuche.

stateIn y WhileSubscribed es una lección gratuita de Jetpack Compose Academy en CoddyKit. Esta es la lección 3 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 Jetpack Compose Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Jetpack Compose Academy incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

From Cold Flow to Hot State

UI state should be hot and cached, but your transformed flows are cold. The stateIn operator converts a cold flow into a StateFlow.

What stateIn Does

stateIn launches the upstream flow in a scope, shares one collection across all collectors, and caches the latest value for new ones.

val ui = source.stateIn(
    viewModelScope, started, initial)

It Needs a Scope

The first argument is a scope, usually viewModelScope, which ties the running flow to the ViewModel lifecycle.

flow.stateIn(viewModelScope, ...)

It Needs an Initial Value

Because a StateFlow always holds a value, stateIn requires an initial one to show before the first real emission arrives.

flow.stateIn(scope, started,
    initialValue = UiState.Loading)

The Sharing Strategy

The middle argument is the SharingStarted policy. It decides exactly when the upstream flow starts and stops running.

Eagerly and Lazily

SharingStarted.Eagerly starts the flow immediately and never stops it, while Lazily starts on the first collector and keeps going.

started = SharingStarted.Eagerly

Meet WhileSubscribed

WhileSubscribed only runs the upstream flow while there is at least one active collector, then stops it when the last one leaves.

started = SharingStarted.WhileSubscribed()

The Five Second Timeout

Passing a small timeout to WhileSubscribed keeps the flow alive briefly after the last collector, surviving quick rotations.

SharingStarted.WhileSubscribed(5000)

Why the Timeout Helps

During a screen rotation the old collector leaves and a new one arrives moments later. The timeout avoids a needless restart in between.

Stops Wasted Work

With WhileSubscribed a database or network flow pauses when the screen is off, then resumes when the user returns. Battery wins. 🔋

A Full stateIn Recipe

Put it together: transform your data, then call stateIn with the scope, WhileSubscribed, and an initial loading state.

val ui = repo.flow().map { UiState(it) }
    .stateIn(viewModelScope,
        SharingStarted.WhileSubscribed(5000),
        UiState.Loading)

Quick Check

Reason about subscriber-driven lifecycles.

Recap: stateIn & WhileSubscribed

Well done! stateIn turns a cold flow into a cached StateFlow, and WhileSubscribed runs it only while observed so you stop wasting work. 🎯

Preguntas frecuentes

¿La lección «stateIn y WhileSubscribed» es gratis?

Sí — el texto completo de «stateIn y WhileSubscribed» 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 Jetpack Compose Academy, actualiza a CoddyKit PRO. El curso de Jetpack Compose Academy incluye 4 lecciones en total.

¿Qué aprenderé en «stateIn y WhileSubscribed»?

Almacene en caché los flows y detenga el trabajo cuando nadie escuche. Practicas Jetpack Compose 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 Jetpack Compose Academy?

No se requiere experiencia previa. Jetpack Compose 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 3 de 4.

¿Cuánto tiempo toma la lección «stateIn y WhileSubscribed»?

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 Jetpack Compose Academy?

Sí. Cada lección de Jetpack Compose 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

  1. StateFlow frente a SharedFlow
  2. Mapear y combinar Flows
  3. stateIn y WhileSubscribed
  4. Eventos puntuales con Channels
← Volver a Jetpack Compose Academy