stateIn и WhileSubscribed
Кэшируйте потоки и прекращайте работу, когда никто не слушает.
«stateIn и WhileSubscribed» — бесплатный урок Jetpack Compose Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Jetpack Compose Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Jetpack Compose Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
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.EagerlyMeet 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. 🎯
Часто задаваемые вопросы
Урок «stateIn и WhileSubscribed» бесплатный?
Да — полный текст урока «stateIn и WhileSubscribed» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Jetpack Compose Academy, подпишись на CoddyKit PRO. Курс Jetpack Compose Academy содержит 4 уроков всего.
Чему я научусь в уроке «stateIn и WhileSubscribed»?
Кэшируйте потоки и прекращайте работу, когда никто не слушает. Ты практикуешь Jetpack Compose Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Jetpack Compose Academy?
Предыдущий опыт не требуется. Jetpack Compose Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «stateIn и WhileSubscribed»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Jetpack Compose Academy?
Да. Каждый урок Jetpack Compose Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- StateFlow и SharedFlow
- Отображение и объединение потоков
- stateIn и WhileSubscribed
- Одноразовые события с каналами