Как выбрать CoroutineDispatcher

«Как выбрать CoroutineDispatcher» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для выбора CoroutineDispatcher учитывайте тип задачи:

  1. Dispatchers.Main – работа с UI (обновление View, LiveData). Используется только в основном потоке.
viewModelScope.launch(Dispatchers.Main) { updateUI() }
  1. Dispatchers.IO – для блокирующих операций (сеть, БД, файлы). Имеет пул потоков для тяжелых задач.
withContext(Dispatchers.IO) { fetchData() }
  1. Dispatchers.Default – для CPU-интенсивных задач (сортировка, вычисления). Использует пул потоков, равный числу ядер.

  2. Dispatchers.Unconfined – запускает корутину в текущем потоке, но может продолжить в любом (редко используется).

Важно: Не используйте Dispatchers.IO для CPU-задач и наоборот. Для кастомных сценариев можно создать свой ExecutorService и конвертировать в диспетчер через asCoroutineDispatcher().