【问题标题】:Safe exiting an Application from a ExceptionHandler subclass?从 ExceptionHandler 子类安全退出应用程序?
【发布时间】:2014-02-22 18:00:27
【问题描述】:

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

我有一个应用程序,其中包含一个活动、多个片段和类以及一个实现默认 UncaughtExceptionHandler 的 ExceptionHandler 子类。我能够成功使用:-

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

在出现未处理的异常时退出应用程序而不显示"ForceClose" 弹出窗口。我使用 System.exit(0) 。我正在整个应用程序中记录日志。我能够将 ExceptionHandler 子类的异常记录到日志中。

现在,我的问题是应用程序在没有经历onPause()、onStop() 或onDestroy() 的情况下退出,以防出现未捕获的异常,但我需要它通过我的MainActivity 的所有这些生命周期。

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

【问题讨论】:

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


    【解决方案1】:

    我终于明白了,如果在启动的第一个活动(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());
    
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2022-01-20
      • 2014-01-18
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多