Ответ
CoroutineDispatcher определяет, на каком потоке или пуле потоков будет выполняться корутина. Основные диспетчеры:
- Dispatchers.Main - для работы с UI (Android Main Thread)
- Dispatchers.IO - для блокирующих операций (сеть, БД, файлы)
- Dispatchers.Default - для CPU-интенсивных задач
- Dispatchers.Unconfined - запускает в текущем потоке, но может продолжить в другом после suspension
Пример:
viewModelScope.launch(Dispatchers.IO) {
val data = fetchData() // IO операция
withContext(Dispatchers.Main) {
updateUI(data) // Обновляем UI в главном потоке
}
}
Можно создавать свои диспетчеры через newSingleThreadContext() или newFixedThreadPoolContext(), но это не рекомендуется из-за утечек ресурсов.