Что происходит при возникновении ошибки в корутине запущенной во viewModelScope

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

Ответ

При ошибке в корутине viewModelScope:

  1. Исключение передаётся в CoroutineExceptionHandler, если он установлен
  2. Если обработчика нет - исключение передаётся в Thread.uncaughtExceptionHandler
  3. Сама ViewModel не уничтожается (в отличие от ошибок в LiveData)

Пример с обработкой:

viewModelScope.launch(CoroutineExceptionHandler { _, throwable ->
    // Обработка ошибки
    _errorLiveData.value = throwable
}) {
    // Код, который может упасть
    throw RuntimeException("Test error")
}

Лучшая практика - обрабатывать ошибки явно через try-catch или использовать sealed классы для состояний.