Что если вызвать runBlocking на DispatcherMain

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

Ответ

Вызов runBlocking на Dispatcher.Main заблокирует главный поток до завершения корутины, что приведёт к ANR (Application Not Responding), если операция внутри корутины занимает больше нескольких секунд.

runBlocking(Dispatchers.Main) {
    delay(3000) // ANR после ~5 секунд
    // Долгие операции здесь
}

Когда использовать:

  • Только для тестирования (в JUnit-тестах)
  • Кратковременные синхронные операции (<5ms)

Альтернативы:

  • Для асинхронного выполнения используйте launch/async с Dispatchers.Main
  • Для фоновых операций - Dispatchers.IO/Default