처리되지 않은 예외를 로깅 한 후 앱을 종료하고 싶습니다.Android UncaughtExceptionHandler to app
public class MyApplication extends Application {
//uncaught exceptions
private Thread.UncaughtExceptionHandler defaultUEH;
// handler listener
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
//logging code
//..........
//call the default exception handler
defaultUEH.uncaughtException(thread, ex);
}
};
public MyApplication() {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}
}
defaultUEH.uncaughtException(thread, ex);
를 호출 한 후 내가 System.exit()
전화를 시도하고 또한 android.os.Process.killProcess(android.os.Process.myPid());
(심지어 내가 모두를 사용하라고 몇 가지 게시물을 발견) : 여기에 검색 한 후 나는 다음과 같은했다. 문제는 내가 검은 화면을 받고 나는 휴대 전화 작업 관리자와 함께 응용 프로그램을 강제 종료해야한다는 것입니다. 내가 도대체 뭘 잘못하고있는 겁니까? 나는 그것의 같은 알
//exception handling
private static MyUncaughtExceptionHandler _unCaughtExceptionHandler;
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
if(_unCaughtExceptionHandler == null)
_unCaughtExceptionHandler = new MyUncaughtExceptionHandler(this);
else
_unCaughtExceptionHandler.setActivity(this);
if(Thread.getDefaultUncaughtExceptionHandler() != _unCaughtExceptionHandler)
Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}
: 내가 다음 코드를 추가 BaseActivity
에서
public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
private BaseActivity activity;
private Thread.UncaughtExceptionHandler defaultUEH;
public MyUncaughtExceptionHandler(BaseActivity activity) {
this.activity = activity;
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
}
public void setActivity(BaseActivity activity) {
this.activity = activity;
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
//LOGGING CODE
//........
defaultUEH.uncaughtException(thread, ex);
}
}
: 마침내
감사
왜 System.exit를 호출해야합니까? 응용 프로그램을 닫으려면 finsih()를 호출하면됩니다. on activity – HendraWD
네,하지만 문제는 메신저가 Activity가 아니라 Application 개체에서 예외를 잡는 것입니다. – cobolero