Ответ
При ошибке в корутине viewModelScope:
- Исключение передаётся в CoroutineExceptionHandler, если он установлен
- Если обработчика нет - исключение передаётся в Thread.uncaughtExceptionHandler
- Сама ViewModel не уничтожается (в отличие от ошибок в LiveData)
Пример с обработкой:
viewModelScope.launch(CoroutineExceptionHandler { _, throwable ->
// Обработка ошибки
_errorLiveData.value = throwable
}) {
// Код, который может упасть
throw RuntimeException("Test error")
}
Лучшая практика - обрабатывать ошибки явно через try-catch или использовать sealed классы для состояний.