Что такое ExceptionHandler в корутинах

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

Ответ

ExceptionHandler в корутинах — это механизм для централизованной обработки необработанных исключений. Он используется в CoroutineScope для перехвата исключений, которые не были пойманы в дочерних корутинах.

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

val scope = CoroutineScope(Job() + handler)
scope.launch {
    throw RuntimeException("Failed!")
}

Ключевые особенности:

  • Работает только для корутин, запущенных через launch (не для async)
  • Должен быть установлен в контексте родительской корутины или scope
  • Не перехватывает исключения, обработанные через try-catch внутри корутины
  • Полезен для логирования или показа ошибок пользователю