1

我是新來的Android以及Java,我會盡我所能做到像possibe一樣具體。安全地從ExceptionHandler子類中退出應用程序?

我有一個應用程序與一個活動和幾個片段和類與ExceptionHandler子類實現默認UncaughtExceptionHandler。我是能夠成功地使用: -

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

不顯示"ForceClose"彈出退出在未處理的異常情況下的應用程序。我用System.exit(0)。我正在通過應用程序記錄日誌。我可以將異常從ExceptionHandler子類記錄到日誌中。

現在,我的問題是,應用程序退出而不在未捕獲的異常的情況下發生onPause()onStop()onDestroy(),但我需要它通過所有這些生命週期過我MainActivity

如何在退出使用ExceptionHandler子類的應用程序時執行此操作?

回答

0

我終於明白了,如果在啓動的第一個活動(MainActivity)中引發錯誤,那麼什麼都做不了。

如果在其他任何活動中拋出,則在ExceptionHandler類中,我們可以傳遞意圖來啓動MainActivity,然後退出應用程序。優雅:P

public class ExceptionHandler implements UncaughtExceptionHandler{

private Activity myContext; 
public ExceptionHandler(Activity context) { 
    this.myContext = context; 
} 
@Override 
public void uncaughtException(Thread thread, Throwable ex) { 
    // TODO Auto-generated method stub 
    StringWriter stackTrace = new StringWriter(); 
    ex.printStackTrace(new PrintWriter(stackTrace)); 
    String report = stackTrace.toString(); 

    if(myContext instanceof MainActivity){ 

     System.gc(); 
     android.os.Process.killProcess(android.os.Process.myPid()); 

    }else{ 

     Intent intent = new Intent(myContext, MainActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.putExtra("EXIT", true); 
     myContext.startActivity(intent); 
     System.gc(); 
     android.os.Process.killProcess(android.os.Process.myPid()); 

    } 
} 

}