티스토리 뷰
서버단에서는 예기치못한 치명적인 오류가 어디선가 발생하더라도 ExceptionHandlering이가능하다.
안드로이드에서도 서버처럼 앵간해서 죽지않는 어플을 만들기위해서는 그런것이 필요하다고 생각했다.
그런데 있다. 어플이 완전히 죽지않게는 할 수 없지만, try catch 하지않은 어딘가에서 치명적인 오류가 발생하여 어플이 강제종료되야 하는 상황이 발생 할 경우 어플을 다시시작한다던가, 시스템의 죄송합니다 알럿대신 커스텀하게 메시지를 뿌리고, 자체적으로 오류보고 프로세스를 구현 할 수도있다.
공개 오류보고 소스인 ACRA 을 이용하여 처리할 수 도있지만, 직접 구현도 어렵지 않다.
Application 생성하여 Manifest에 등록하고, onCreate에서 DefaultUncaughtExceptionHandler 를 직접 만들어 넣어주었다.
직접만든 커스텀UncaughtExceptionHandler 는 UncaughtExceptionHandler implement 하여 uncaughtException 를 Override하면된다.
코드는 아래와 같다.
public class MyAppplication extends Application{ public void onCreate(){ Thread.setDefaultUncaughtExceptionHandler( new MyUncaughtExceptionHandler(getBaseContext() , getContentResolver() , Thread.getDefaultUncaughtExceptionHandler()) ); } } public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler { private Context mContext; private ContentResolver mContentResolver; private UncaughtExceptionHandler mDefaultUncaughtExceptionHandler; public MyUncaughtExceptionHandler(Context context , ContentResolver contentResolver , UncaughtExceptionHandler uncaughtExceptionHandler){ this.mContext = context; this.mContentResolver = contentResolver; this.mDefaultUncaughtExceptionHandler = uncaughtExceptionHandler; } @Override public void uncaughtException(Thread _thread, Throwable _throwable) { final Writer result = new StringWriter(); final PrintWriter printWriter = new PrintWriter(result); _throwable.printStackTrace( printWriter ); String stacktrace = result.toString(); printWriter.close(); // Log.e("test", "stacktrace : "+stacktrace); // if(Thread.currentThread() == Looper.getMainLooper().getThread()){ // android.os.Process.killProcess( android.os.Process.myPid() ); // System.exit(10); // } mDefaultUncaughtExceptionHandler.uncaughtException(_thread, _throwable); } } |
코드에는 DefaultUncaughtExceptionHandler 으로 uncaughException 을 다시 넘겨 시스템에서 처리되게 하였지만,
넘기지않고 오류에대한 처리를 구현하면 된다.
'Development' 카테고리의 다른 글
[IOS] ARC (자동 메모리정리) (0) | 2014.02.19 |
---|---|
[Android] open failed: EBUSY (Device or resource busy) (0) | 2014.02.19 |
[Android] marshalling/unmarshalling 마샬링/언마샬링 라이브러리 (Xml / JSON) (0) | 2014.01.20 |
[Android] AndroidStudio Gradle Daemon오류 (2) | 2013.12.19 |
[Android] Mirror 레이아웃 개발기 (0) | 2013.12.18 |
- Total
- Today
- Yesterday