gpt4 book ai didi

android - 使用 UncaughtExceptionHandler 执行 Android 通常执行的操作以及我需要的额外功能

转载 作者:搜寻专家 更新时间:2023-11-01 08:47:04 24 4
gpt4 key购买 nike

我正在开发一个 Android 库,如果发现未捕获的异常,我需要在其中执行一些操作。

我成功地设置了未捕获的异常处理程序并运行了我需要的代码,即将一些信息发布到网络服务器,但在我的部分完成后我希望应用程序执行 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);
}

关于android - 使用 UncaughtExceptionHandler 执行 Android 通常执行的操作以及我需要的额外功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27219249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com