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

Posted

技术标签:

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

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

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

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

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

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

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

【问题讨论】:

【参考方案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());

    

【讨论】:

以上是关于从 ExceptionHandler 子类安全退出应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

从@RestControllerAdvice @ExceptionHandler 方法返回 DTO

UISlider thumbImage 无法退出 uislider 框架

如何实现 asp.net core 安全优雅退出 ?

20145309信息安全系统设计基础第11周学习总结前篇

@ExceptionHandler 没有被触发?

@ExceptionHandler注解和@ControllerAdvice注解