일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- rotate circle
- Android
- ipad
- c
- 앱 기획
- HTML 게임 엔진
- Engineer Australia
- game engine
- BlurDrawable
- 공학인증
- 호주 이민
- first_app
- 블러 효과
- 회전판
- StatefulWidget
- 플러터
- progress
- flutter progress dialog
- first flutter app
- nginx
- 기술인증
- StatelessWidget
- c++
- flutter
- quintus
- reverse proxy
- PowerMockup
- ABEEK
- 맨붕
- OpenGL
Archives
- Today
- Total
우동우동우's note
[Android] catch 하지 않은 Exception 발생시 파일로 로그 저장하기 본문
안드로이드에서 RuntimeException이 발생했을 때 처리에 대해 많이들 고민이 있을 것이다. try catch를 모든 곳에서 처리하기란 또 어려운 일이 될 것이다. 이런 경우 로그를 저장하기 원하는데 이에 대해 다음과 같은 방법으로 저장할 수 있다.
public class MainApp extends Application { UncaughtExceptionHandler defaultExceptionHandler; public MainApp() { defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { // 파일로 로그 작성 mainHandler.obtainMessage(0, ex).sendToTarget(); } }); } Handler mainHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); Thread.setDefaultUncaughtExceptionHandler(defaultExceptionHandler); throw new RuntimeException((Throwable) msg.obj); } }; }
Application을 실행할 때 우선 안드로이드 os 내부에서 Default로 UncauthExceptionHandler를 설정해 놓았다. 이를 받아서 메모리에 저장을 해두고 Exception이 발생했을 때 이에 대해 처리를 할 수 있는 UncaughtExceptionHandler를 만들어 놓아서 파일로 저장하는 로직을 이곳에서 처리하도록 한다. (파일로 로그를 작성하는 방법은 조금 찾으면 다 가능하실 거라 생각하고 넘어가겠습니다.)그리고 Handler를 사용하여 발생한 Exception을 전송하여 내부에서 다시 throw 하도록 한다.
Handler를 사용한 이유는 UncaughtExceptionHandler 내부에서 throw를 하면 앱이 종료가 되지 않아서 이다. 특별한 다른 이유는 없다. 앱의 종료를 원치 않는다면 throw 대신에 해당 Activity를 재시작하는 코드를 넣을 수도 있을 것 같다.
'Java & Android' 카테고리의 다른 글
[java] InputStream to String (0) | 2013.11.13 |
---|---|
[Android] Memory Check (0) | 2013.11.13 |
Disallow Intercept Touch Event (0) | 2013.02.13 |
Android Sectioned ListView (2) | 2013.02.08 |
[Android] Fragment 안에 MapView 넣기 (2) | 2012.08.08 |
Comments