2016-08-11 4 views
3

처리되지 않은 예외를 로깅 한 후 앱을 종료하고 싶습니다.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); 

    } 
} 

: 마침내

감사

+0

왜 System.exit를 호출해야합니까? 응용 프로그램을 닫으려면 finsih()를 호출하면됩니다. on activity – HendraWD

+0

네,하지만 문제는 메신저가 Activity가 아니라 Application 개체에서 예외를 잡는 것입니다. – cobolero

답변

0

내가이가 Thread.UncaughtExceptionHandler 인터페이스를 구현하는 클래스를 만들고 해결 코드에 질문이 있지만 어떻게 든 작동합니다. 내가 더 많은 자유 시간을 가졌을 때 나는 이것을 근본 원인을 찾아서 게시 할 것입니다.