TGViewer
Android разработка Android разработка @android_its · 4.88K subscribers
Post #785 1.29K
💡 Android/Kotlin: не перезапускайте `Flow` после каждого поворота экрана

Частая ошибка в ViewModel:


val uiState = repository.observeData()
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(),
initialValue = UiState.Loading
)


У WhileSubscribed() тайм-аут по умолчанию равен нулю. Когда Activity пересоздаётся при повороте экрана, подписчик исчезает, upstream-поток сразу останавливается, а затем запускается заново.

Это может повторно инициировать запросы, чтение базы или тяжёлые вычисления.

Добавьте небольшой период ожидания:


val uiState = repository.observeData()
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = UiState.Loading
)


Теперь поток продолжит работать ещё пять секунд после исчезновения последнего подписчика. Этого обычно достаточно, чтобы новая Activity успела подключиться после изменения конфигурации.

В Compose собирайте состояние с учётом жизненного цикла:


val uiState by viewModel.uiState.collectAsStateWithLifecycle()


Получается полезный баланс:

- поворот экрана не перезапускает весь pipeline;
- при реальном уходе со страницы поток остановится;
- ViewModel не тратит ресурсы без активного интерфейса.

5_000 - не магическое значение. Для дорогого подключения его можно увеличить, а для быстрого локального потока - уменьшить.

#Android #Kotlin #StateFlow #JetpackCompose
  • ❤ 2
  • 👍 2
More from @android_its
  1. Sep 16, 2026🚀 JetBrains обновила roadmap Kotlin: главный фокус - Multiplatform, Wasm и удобство разра…
  2. Aug 23, 2026✔️ Как работают SAM-conversions Single Abstract Method (SAM) интерфейсы — это интерфейсы т…
  3. Aug 23, 2026🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажет…
  4. Aug 19, 2026✔️ Апдейт ChatGPT: изолированный контекст в Projects, тесты для проверки знаний и правки д…
  5. Aug 4, 2026🔥 JetBrains открыла исходники KotlinLLM - Kotlin-код, который дописывает себя во время вы…
  6. Aug 3, 2026Google убрала последний барьер для перехода с iPhone на Android 😐 В Android 17 переезд с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →