2014-04-17 1 views
1

내 응용 프로그램에서 unforseen 충돌 이벤트에 물건을 할 수 있도록 잡히지 않은 예외 처리기를 설정하고 싶습니다. (나는 등 가까운 밖으로 소켓, 명확한 통지 ... 같은 물건을하고 싶어.)ACRA를 사용하고 UncaughtExceptionHandler도 설정하는 방법?

Thread.currentThread().setDefaultUncaughtExceptionHandler(sDefaultThreadHandler);

private static UncaughtExceptionHandler sDefaultThreadHandler = new UncaughtExceptionHandler() { 
    @Override 
    public void uncaughtException(Thread thread, Throwable ex) { 
     // i want ACRA to log here, then clear notifications, close out connections, cancel asynctasks...etc. 

     // DO NOT REMOVE or else your app will hang when there is a crash. 
     android.os.Process.killProcess(android.os.Process.myPid()); 
     System.exit(10); 
    } 
}; 

문제가 내가 ACRA는 또한 프로세스가 종료되기 전에보고 싶어입니다 . 내가 어떻게이 일을 완수합니까?

답변

3

오, 기다려주십시오. ACRA는 (https://github.com/ACRA/acra/blob/master/src/main/java/org/acra/ErrorReporter.java#L201에 따라) 기본 예외 처리기를 사용한다는 것을 알았습니다. 즉, 자체 스레드에 스레드 예외 처리기가 있으면 먼저 사용됩니다. 당신이 정말로 ACRA를 사용해야하는 경우에서 onCreate의 기본 UEH() defaultUEH를 저장해야 이럴

Thread.currentThread().setUncaughtExceptionHandler(mYourOwnThreadHandler);

하고, 다음에 우선 uncaughtException() 방법 안에, 단지 Thread.getDefaultUncaughtExceptionHandler().uncaughtException(thread, ex);

+0

를 호출하여 위쪽으로 위임 = Thread.getDefaultUncaughtExceptionHandler(); defaultUEH.uncaughtException (thread, ex);와 핸들러에서 호출하십시오. Threading.getDefaultUncaughtExceptionHandler() 호출. uncaughtException (스레드, 예); 핸들러에서 루프가 발생합니다. –