Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Kotlin: flow, dispatcher, flowon, main, io

При использовании Flow, какой Dispatcher вы бы выбрали для работы с UI и для фоновых задач?

Проверяет умение назначать правильный контекст выполнения для потоков данных.

Короткий ответ

Для обновления UI при сборе Flow выбирают Dispatchers.Main, чтобы безопасно работать с элементами интерфейса. Для фоновых задач (сеть, база данных, вычисления) используют Dispatchers.IO или Dispatchers.Default соответственно. Рекомендуется переключаться контекст в середине цепочки через оператор flowOn.

Длинный ответ

  • UI:

    Сбор в lifecycleScope.launch(Dispatchers.Main) или оператор collectLatest { … }.

  • I/O-операции:

    Использовать withContext(Dispatchers.IO) внутри map, flatMapConcat или flowOn(Dispatchers.IO).

  • CPU-нагрузка:

    Для тяжёлых вычислений — Dispatchers.Default.

Пример:

repository.getDataFlow()
  	.flowOn(Dispatchers.IO)        // upstream (fetch) на IO
  	.map { transform(it) }
  	.flowOn(Dispatchers.Default)   // compute на Default
  	.onEach { viewState.value = it }
  	.launchIn(viewModelScope)      // collect на Main

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Kotlin

    Kotlin

Ключевые слова

#flow

#dispatcher

#flowon

#main

#io

Подпишись на Android Developer в телеграм