我想在记录自己的错误后故意使我的应用程序崩溃。 Handler在Application.onCreate()中注册:
// set global exception handler
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, final Throwable ex) {
// unregister
Thread.setDefaultUncaughtExceptionHandler(null);
// do report ...
// crash app -does not work, app is frozen
if (ex instanceof RuntimeException)
throw (RuntimeException) ex;
throw new RuntimeException("Re-throw", ex);
}
但是,我的应用程序冻结了,而不是因对话框崩溃。如果我没有注册处理程序,如何使应用程序崩溃?
这段代码永远不会起作用。
调用未捕获的异常处理程序after由于未捕获异常,线程已终止。如果您随后尝试重新抛出异常,则将没有其他方法可以捕获它。
I suspect您所经历的冻结是当前线程死亡的直接后果。
跟进:
... Android 中是否有其他方法可以在全局级别拦截异常,而不使用 Thread.setDefaultUncaughtExceptionHandler?
据我所知,不。
或者说链接会是什么样子?
像这样的东西:
public void uncaughtException(Thread thread, final Throwable ex) {
// do report ...
getSomeOtherHandler(...).uncaughtException(thread, ex);
}
或者,由于 ThreadGroup 实现了UncaughtExceptionHandler
, ...
public void uncaughtException(Thread thread, final Throwable ex) {
// do report ...
thread.getThreadGoup().uncaughtException(thread, ex);
}
基本上,您只需调用其他处理程序即可。这不是火箭科学。
但请注意,一旦您进入这些处理程序之一,就无法以“正常”方式捕获异常并从中恢复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)