Работал ли с CoroutineExceptionHandler

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

Ответ

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

Пример:

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

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

Нюансы:

  • Работает только для необработанных исключений (не перехваченных try/catch).
  • В async исключение не выбросится сразу — нужно вызывать await().
  • Не сработает для SupervisorJob, если ошибка в дочерней корутине.
  • Лучше логировать или уведомлять пользователя, а не подавлять ошибки.