【发布时间】:2018-01-06 05:16:26
【问题描述】:
我在Stackoverflow 上问过this 问题,答案对我有用,它覆盖handleUncaughtException,我保存异常并抛出默认Unfortunately app has stopped working,但是当我将它集成到我的应用程序中时,我面临一个问题。
这就是我得到的答案。
private Thread.UncaughtExceptionHandler defaultExceptionHandler;
public void registerCrash(){
defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException (Thread thread, Throwable e){
handleUncaughtException (thread, e);
if(defaultExceptionHandler != null){
defaultExceptionHandler.uncaughtException(thread, e);
}
}
});
}
它是做什么的,首先它转到handleUncaughtException (thread, e);我在这个方法中保存崩溃日志,然后它读取这一行
if(defaultExceptionHandler != null){
defaultExceptionHandler.uncaughtException(thread, e);
}
这里我们再次抛出未捕获的异常,所以它再次进入第一行,再次保存异常,然后进入循环,应用程序没有响应。
我想要的是保存崩溃日志,然后向用户显示默认的Unfortunate 消息。
编辑
在应用程序启动时,它会显示此内容;
defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
当应用程序崩溃时,它会读取这些行
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException (Thread thread, Throwable e){
handleUncaughtException (thread, e); //Custom Method
if(defaultExceptionHandler != null){
defaultExceptionHandler.uncaughtException(thread, e);
}
}
所以它首先转到handleUncaughtException(),我提供了自定义实现,然后转到此;
if(defaultExceptionHandler != null){
defaultExceptionHandler.uncaughtException(thread, e);
}
defaultExceptionHandler 永远不会为空;所以它会在多次崩溃的情况下进入循环。
我尝试在那里添加count,但每次都是0。
【问题讨论】:
-
So it goes in a loop in case of multiple crashes你能指出发生这种情况的场景吗?是什么导致另一个异常发生? -
@azizbekian :我无法找到重现它的步骤。这种情况并非每次都会发生,但有时会发生
-
什么是 defaultExceptionHandler 方法。是你自己的方法吗?如果是,请发布该方法代码。并发布handleUncaughtException(thread, e)方法代码
-
你有堆栈跟踪要发布吗? defaultExceptionHandler.uncaughtException 会做 system.exit 吗?它可能会引发安全异常
-
“在应用程序启动时它读取这个”是什么意思? (你在哪里做的)
标签: android performance android-fragments exception-handling