如何捕获未处理的错误并进一步传递它们

问题描述 投票:3回答:2

我的问题是如何在Android应用程序中捕获未处理的错误并进一步传递它们,这样它确实会使应用程序崩溃。

我正在为Android创建SDK,我仍然希望开发人员处理他们的错误,但我也希望了解我的崩溃。

我知道要捕获我可以使用的错误:

        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {

        }
    });

但是如何进一步传递呢?如何崩溃申请?如果我使用:

throw new RuntimeException(ex);

它不会使应用程序崩溃,而是导致ANR错误。

第二个问题是Fabric(Crashlytics)库如何工作?请注意,如果它也存在于应用程序中,我也不想破坏Fabric的工作流程。

android exception-handling crashlytics twitter-fabric crashlytics-android
2个回答
3
投票

在低级别UncaughtExceptionHandler是捕获所有应用程序错误的机制,以防UncaughtExceptionHandler的实例附加到应用程序线程。

如何崩溃申请?

使用这个thread

它不会使应用程序崩溃,而是导致ANR错误。

发生这种情况是因为你抛出异常并进入uncaughtException方法,再次抛出异常。所以你有一个周期。

但是如何进一步传递呢?

我想你需要将异常数据保存到某个存储 - SD卡,将崩溃信息发送到电子邮件等。

在这种情况下,您需要在uncaughtException方法中实现您的逻辑。 你不需要再进一步传递它!

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
               // put your save logic here
               // save to file, send to email, etc.
               // Also you can get information about throwed exception
               // for example : ex.getMessage();
        }
    });

您需要将Thread.setDefaultUncaughtExceptionHandler(...)放到Application类中以获得最佳情况。

第二个问题是Fabric(Crashlytics)库如何工作?请注意,如果它也存在于应用程序中,我也不想破坏Fabric的工作流程。

Fabric还使用UncaughtExceptionHandler来捕获应用中的所有错误。

If you need to see error in logcat

只需通过Answers标记过滤logcat。或者通过System.exit


1
投票

但是如何进一步传递呢?

在致电setDefaultUncaughtExceptionHandler()之前,请致电getDefaultUncaughtExceptionHandler()。抓住新的未捕获的异常处理程序。当你使用uncaughtException()调用时,做你自己的工作,并在旧处理程序上调用uncaughtException()

如何崩溃申请?

我通常将一些数字除以零。

© www.soinside.com 2019 - 2024. All rights reserved.