В какую корутину можно положить ExceptionHandler

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

Ответ

В корутине можно использовать CoroutineExceptionHandler для обработки необработанных исключений. Он устанавливается в контексте корутины через CoroutineScope или при запуске корутины с помощью launch/async.

Пример:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Caught $exception")
}

// Вариант 1: через scope
val scope = CoroutineScope(Job() + handler)
scope.launch { 
    throw RuntimeException("Oops!") 
}

// Вариант 2: при запуске
GlobalScope.launch(handler) {
    throw RuntimeException("Oops!")
}

Важно: CoroutineExceptionHandler работает только для корутин, запущенных через launch. Для async исключения будут пойманы при вызове await().