Я работал над приложением для Android, которое try/catch
часто используется, чтобы предотвратить его сбой даже в тех местах, где в этом нет необходимости. Например,
Ссылка на представление в xml layout
with 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
.
ОБНОВИТЬ
Поскольку этому вопросу уделяется много внимания, и некоторые люди неверно истолковали его (возможно, потому, что я не сформулировал его четко), я собираюсь перефразировать его.
Вот что здесь делают разработчики
Написана и протестирована функция , это может быть небольшая функция, которая просто инициализирует представления, или сложная, после тестирования она оборачивается вокруг
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 пытается перехватить исключение для другой цели, чем этот вопрос.
catch(Exception e){}
- этот комментарий имел смысл до редактирования вопроса