从ExceptionHandler子类安全退出应用程序?

时间:2014-01-30 12:20:50

标签: java android exception-handling uncaughtexceptionhandler system.exit

我是Android和java的新手,我会尽力做到尽可能具体。

我有一个应用程序,其中包含一个活动,多个片段和类以及一个实现默认ExceptionHandler的{​​{1}}子类。我成功地使用了: -

UncaughtExceptionHandler

在未处理异常的情况下退出应用程序而不显示Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));弹出窗口。我使用"ForceClose"。我正在通过应用程序记录日志。我能够将ExceptionHandler子类中的异常记录到日志中。

现在,我的问题是,如果发生未被捕获的异常,应用程序会退出而不会经历System.exit(0)onPause()onStop(),但是我需要它来通过我所有这些生命周期onDestroy()

如何使用MainActivity子类退出应用程序时执行此操作?

1 个答案:

答案 0 :(得分: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());

    }
}

}