필자는 try/catch
필요가없는 곳에서도 충돌을 방지하기 위해 자주 사용하는 Android 앱을 개발 하고 있습니다. 예를 들면
의보기는 다음 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
정말 우리의 필요 다음, 정말이 UI 스레드 또는 다른 스레드 거기 캐치 모든 것에 예외 핸들러를 첨부 할 수 있습니까? 가능하다면 더 나은 접근 방식이 될 것입니다.
예, 비어있는 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){}
- 질문에 대한 편집하기 전에 감각을 만들어이 댓글