使用UncaughtExceptionHandler来完成Android通常所做的事情,以及我需要的额外功能
我正在开发一个Android库,如果发现未捕获的异常,我需要执行一些操作 我正在成功设置我的未捕获异常处理程序并运行我需要的代码,这是将一些信息发布到web服务器,但在我的部分完成后,我希望应用程序执行Android通常执行的操作,即向用户显示一个对话框,通知他们它已崩溃,然后退出应用程序,并将详细信息发布到Google Play开发者控制台 目前,我的未捕获异常已成功发布到服务器,但随后应用程序仍在运行,但由于线程消失,处于一种有点奇怪的状态,通常情况下,如果抛出我的未捕获异常,Android会关闭应用程序 以下是我如何执行未捕获异常处理程序:使用UncaughtExceptionHandler来完成Android通常所做的事情,以及我需要的额外功能,android,exception,uncaughtexceptionhandler,Android,Exception,Uncaughtexceptionhandler,我正在开发一个Android库,如果发现未捕获的异常,我需要执行一些操作 我正在成功设置我的未捕获异常处理程序并运行我需要的代码,这是将一些信息发布到web服务器,但在我的部分完成后,我希望应用程序执行Android通常执行的操作,即向用户显示一个对话框,通知他们它已崩溃,然后退出应用程序,并将详细信息发布到Google Play开发者控制台 目前,我的未捕获异常已成功发布到服务器,但随后应用程序仍在运行,但由于线程消失,处于一种有点奇怪的状态,通常情况下,如果抛出我的未捕获异常,Android
private static void setUnhandledExceptionHandler()
{
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler()
{
@Override
public void uncaughtException(final Thread thread, final Throwable) {
CrashReporter.ReportUnhandledCrash(((Exception) ex));
Looper.loop();
}
});
}
基本上,我想做的是,让我的应用程序通过我未处理的异常处理程序发布到我的服务器,然后退出应用程序,就像Android通常做的那样,即在使用时显示一个强制关闭错误并关闭应用程序 我能看到你如何做到这一点的唯一方法既不干净也不愉快,所以在我们开始之前,我要说声对不起 操作顺序为:
您实际上是在两次抛出相同的异常,但在第二次抛出时删除了恢复机制。我在跟踪GoogleAnalytics时遇到了类似的问题-大多数异常在我尝试在默认处理程序中报告时丢失。所以我缓存了它们,并在下一次启动时报告它们 让应用程序崩溃的第二个技巧(希望这能回答您的问题)是存储“旧”DefaultUncaughtExceptionHandler并将异常传递给它 下面的onCreate方法是我的应用程序类之一
@Override
public void onCreate()
{
super.onCreate();
trackCachedException();
setupExceptionHandling();
}
private void setupExceptionHandling()
{
_systemExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.UncaughtExceptionHandler myHandler = new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread thread, Throwable ex)
{
cacheException(thread.getName(), ex);
if (_systemExceptionHandler != null)
{
_systemExceptionHandler.uncaughtException(thread, ex);
}
}
};
// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);
}
你的问题是什么?对不起,不是很清楚,我已经更新了我的问题