Flo*_*Flo 3 java crash error-handling android
在记录我自己的错误后,我想故意崩溃我的应用程序.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);
}
Run Code Online (Sandbox Code Playgroud)
但是,我的应用程序冻结而不是崩溃对话框.如果我没有注册处理程序,我怎么能崩溃应用程序呢?
这段代码永远不会起作用.
由于未捕获的异常导致线程终止后,将调用未捕获的异常处理程序.如果您然后尝试重新抛出异常,则没有其他任何东西可以捕获它.
如果您希望在正常情况下处理重新抛出的异常,则必须在堆栈中进一步进行日志记录.
您唯一的另一个选择是明确地链接到另一个UncaughtExceptionHandler.
我怀疑你遇到的冻结是当前线程死亡的直接后果.
跟进:
...在Android中是否有其他方法可以在不使用Thread.setDefaultUncaughtExceptionHandler的情况下拦截全局级别的异常?
AFAIK,没有.
或者链接怎么样?
像这样的东西:
public void uncaughtException(Thread thread, final Throwable ex) {
// do report ...
getSomeOtherHandler(...).uncaughtException(thread, ex);
}
Run Code Online (Sandbox Code Playgroud)
或者,自ThreadGroup实现UncaughtExceptionHandler,...
public void uncaughtException(Thread thread, final Throwable ex) {
// do report ...
thread.getThreadGoup().uncaughtException(thread, ex);
}
Run Code Online (Sandbox Code Playgroud)
基本上,你只需要调用其他一些处理程序.这不是火箭科学.
但请注意,一旦您登陆其中一个处理程序,就无法以"正常"方式捕获并从异常中恢复.