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

Ada*_*yrc 5 android exception-handling crashlytics twitter-fabric crashlytics-android

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

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

我知道要捕捉错误,我可以使用:

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

        }
    });
Run Code Online (Sandbox Code Playgroud)

但是如何进一步传递呢?如何使应用程序崩溃?如果我使用:

throw new RuntimeException(ex);
Run Code Online (Sandbox Code Playgroud)

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

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

Ser*_*kov 2

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

如何使应用程序崩溃?

使用这个线程

它不会导致应用程序崩溃,而是导致 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();
        }
    });
Run Code Online (Sandbox Code Playgroud)

为了最好的情况,您需要将 Thread.setDefaultUncaughtExceptionHandler(...) 放入您的 Application 类中。

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

Fabric 还用于UncaughtExceptionHandler捕获应用程序中的所有错误。

如果您需要在 logcat 中查看错误

只需按标签过滤 logcat 即可Answers。或者通过System.exit