Чем фиксирован DefaultDispatcher

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

Ответ

DefaultDispatcher — это стандартный диспетчер Kotlin Coroutines, используемый для выполнения корутин, если явно не указан другой.

Особенности:

  • Использует общий пул потоков (по умолчанию равен количеству ядер CPU).
  • Оптимизирован для CPU-интенсивных задач.
  • Не подходит для блокирующих операций (IO, сетевые запросы) — для них лучше Dispatchers.IO.

Как зафиксировать (переопределить):

// В тестах (используя kotlinx-coroutines-test)
runTest {  
    Dispatchers.setMain(UnconfinedTestDispatcher())  
    // Тест с корутинами  
    Dispatchers.resetMain()  
}  

// В продакшн-коде (не рекомендуется, лучше внедрять через DI)  
Dispatchers.setMain(customDispatcher)  

⚠️ Фиксация может нарушить работу других корутин, поэтому лучше явно указывать диспетчер при запуске:

viewModelScope.launch(Dispatchers.Default) { ... }