Я работаю над Android-приложением, которое часто использует try/catch
, чтобы предотвратить его сбой даже в тех местах, где нет необходимости. Например,
Вид в xml layout
с id = toolbar
ссылается как:
// see new example below, this one is just confusing
// it seems like I am asking about empty try/catch
try {
View view = findViewById(R.id.toolbar);
}
catch(Exception e) {
}
Этот подход используется во всем приложении. Трассировка стека не печатается, и очень сложно найти, что пошло не так. Приложение неожиданно закрывается, не распечатывая трассировку стека.
Я попросил моего старшего объяснить это мне, и он сказал:
Это для предотвращения сбоев в производстве.
Я полностью не согласен с ним. Для меня это не способ предотвратить сбои приложений. Он показывает, что разработчик не знает, что он/она делает и сомневается.
Этот подход используется в промышленности для предотвращения сбоев корпоративных приложений?
Если try/catch
действительно, действительно ли наша потребность в этом случае, можно ли связать обработчик исключений с потоком пользовательского интерфейса или другими потоками и поймать все там? Это будет лучший подход, если это возможно.
Да, пустой try/catch
плохой, и даже если мы печатаем трассировку стека или исключение журнала на сервер, случайные блокировки кода в try/catch
случайно во всем приложении не имеют смысла для меня, например. когда каждая функция заключена в try/catch
.
UPDATE
Поскольку этот вопрос получил много внимания, и некоторые люди неправильно истолковали вопрос (возможно, потому, что я не сформулировал его четко), я собираюсь перефразировать его.
Вот что здесь делают разработчики
-
Функция написана и проверена, она может быть небольшой функцией, которая только инициализирует представления или сложную, после тестирования она обернута вокруг блока
try/catch
. Даже для функции, которая никогда не вызовет каких-либо исключений. -
Эта практика используется во всем приложении. Иногда выполняется трассировка стека, а иногда только
debug log
с некоторым случайным сообщением об ошибке. Это сообщение об ошибке отличается от разработчика разработчиком. -
При таком подходе приложение не падает, но поведение приложения становится неопределенным. Даже когда-то трудно следить за тем, что пошло не так.
-
Реальный вопрос, который я задавал; Является ли практика в отрасли предотвращением сбоев корпоративных приложений?, и я не спрашиваю о пустой try/catch. Похоже, пользователи любят приложение, которое не падает, чем приложения, которые ведут себя неожиданно? Потому что это действительно сводится к тому, чтобы либо свернуть его, либо представить пользователю пустой экран, или пользователь, о котором не знает поведение, не знает.
-
Я размещаю несколько фрагментов из реального кода здесь
private void makeRequestForForgetPassword() { try { HashMap<String, Object> params = new HashMap<>(); String email= CurrentUserData.msisdn; params.put("email", "blabla"); params.put("new_password", password); NetworkProcess networkProcessForgetStep = new NetworkProcess( serviceCallListenerForgotPasswordStep, ForgotPassword.this); networkProcessForgetStep.serviceProcessing(params, Constants.API_FORGOT_PASSWORD); } catch (Exception e) { e.printStackTrace(); } } private void languagePopUpDialog(View view) { try { PopupWindow popupwindow_obj = popupDisplay(); popupwindow_obj.showAsDropDown(view, -50, 0); } catch (Exception e) { e.printStackTrace(); } } void reloadActivity() { try { onCreateProcess(); } catch (Exception e) { } }
Это не дубликат Оптимизация обработки исключений для Android практики, OP пытается выхватить исключение для другогоцели, чем этот вопрос.