从 ExceptionHandler 子类安全退出应用程序?
Posted
技术标签:
【中文标题】从 ExceptionHandler 子类安全退出应用程序?【英文标题】:Safe exiting an Application from a ExceptionHandler subclass? 【发布时间】: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
子类退出应用程序时执行此操作?
【问题讨论】:
【参考方案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