当前位置: 首页 > 知识库问答 >
问题:

Android中的Crashlytics-如何在一个地方捕获所有异常/崩溃

郜琦
2023-03-14

使用Java(android,但这是一个Java问题),我在应用程序类中创建了一个默认的异常处理程序,大致如下所示,它取自一些SO线程:

    public class MyApplication extends Application {
@Override
    public void onCreate() {
        super.onCreate();
        AppInitialization();
    }

    private void AppInitialization() {
         defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
         Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
    }

    private UncaughtExceptionHandler defaultUEH;

    // handler listener
    private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            ex.printStackTrace();
            // TODO handle exception here
        }
    };
}

让我们谈谈我的目标是什么。我需要为crashLytics事故报告记录额外的信息。因此,每当发生异常时,就会调用钩子uncaughtException(线程线程,可抛出的ex)。我假设这将适用于崩溃和异常(不确定)。

关于这个问题的3个问题:

更新:我在这里看到有人找到了一个解决方案,但使用这种方法,它是否使crashlytics报告致命的问题以及?

共有1个答案

陆畅
2023-03-14

我找到了一种干净利落地做到这一点的方法,它测试正常。小心Crashlytics.log在崩溃报告期间发送日志。似乎不能在版本Crashlytics 2.3.14.151上始终如一地工作。我使用Crashlytics.SetString(key,value)。log似乎与Crashlytics.LogException(..)一起工作得很好不过。

我的另一个问题是,它是否适用于不确定的例外情况。答案是肯定的,我自己测试过。

因此它捕获所有线程中的所有异常。

   public class DefaultUnCaughtExceptionHandlerDecorator implements UncaughtExceptionHandler {

   private UncaughtExceptionHandler mDefaultUncaughtExceptionHandler; //we will decorate the default handler to add functionality to it

   public DefaultUnCaughtExceptionHandlerDecorator(UncaughtExceptionHandler mDefaultUncaughtExceptionHandler) {
       this.mDefaultUncaughtExceptionHandler = mDefaultUncaughtExceptionHandler;
   }

   @Override
   public void uncaughtException(Thread t, Throwable e) {

       logToCrashLytics(); //add our crashlytics logging and keys here
       //  we have added our crashlytics extra data, now invoke Crashlytics
       mDefaultUncaughtExceptionHandler.uncaughtException(t, e);
   }

   private void logToCrashLytics() {

           Crashlytics.setUserIdentifier(Model.getUserID());//or whatever. this will show directly on crashlytics dashboard a pretty element

       Crashlytics.setString("Some useful Info","user is logged in"); // or whatever you want, such as printing out singleton managers references or model info
     //dont use Crashlytics.Log(..) here. it wont work consistent. 
   }
Thread.setDefaultUncaughtExceptionHandler(new DefaultUnCaughtExceptionHandlerDecorator(Thread.getDefaultUncaughtExceptionHandler()));
 类似资料:
  • 我有一个具有GUI和套接字通信的不小的多线程应用程序。在开发过程中,我发现有时有些异常没有被捕获和记录。如果有,我必须盯着控制台看。 有没有办法在一个地方捕获来自不同线程(包括EDT)的未捕获异常,比如在main()中,并记录它们?我确实在main()中放置了一个try catch来捕捉可丢弃的对象,但它不起作用。 编辑: 更具体地说,我有遗嘱执行人。newCachedThreadPool(),具

  • 我目前在我的路由中使用dotry/doCatch块,因此我无法使用全局onException块。 然而,如果驼峰路由中断(由于错误代码或意外/未测试的场景),我希望执行一些业务逻辑。希望这永远不会发生,但我仍然想处理更糟糕的情况。 我不能在全局OneException块中有java.lang.Exception,而且,我不想在每个路由上都添加一个额外的捕获。 在抛出未捕获的异常和中断路由之前,是否

  • 问题 怎样捕获代码中的所有异常? 解决方案 想要捕获所有的异常,可以直接捕获 Exception 即可: try: ... except Exception as e: ... log('Reason:', e) # Important! 这个将会捕获除了 SystemExit 、 KeyboardInterrupt 和 GeneratorExit 之外的所有异常。

  • 本文向大家介绍Android application捕获崩溃异常怎么办,包括了Android application捕获崩溃异常怎么办的使用技巧和注意事项,需要的朋友参考一下 Android application捕获崩溃异常怎么办? 通用 application 1、收集所有 avtivity 用于彻底退出应用 2、捕获崩溃异常,保存错误日志,并重启应用 以上就是本文的全部内容,希望对大家的学习

  • 问题内容: 我想捕获一个异常,该异常嵌套在另一个异常中。我目前正在这种方式: 有没有一种方法可以使此操作更高效,更优雅? 问题答案: 没有更优雅的方法来选择性地“捕获”嵌套异常。我想如果您做了很多这样的嵌套异常,就可以将代码重构为通用的实用程序方法。但是它仍然不会优雅或高效。 优雅的解决方案是消除异常嵌套。要么不首先将异常链接起来,要么(有选择地)解开包装并将嵌套的异常重新扔到堆栈的上方。 嵌套异

  • 问题内容: 为什么在Python中捕获所有异常不是一个好主意? 据我所知,追赶使用的所有例外条款,甚至会搭上“特别”蟒蛇例外:,,和。那么,为什么不使用子句来捕获所有异常呢? 问题答案: 因为它非常不明确,并且无法使您对异常做任何有趣的事情。而且,如果您捕获了每个异常,则可能会发生很多甚至不知道正在发生的异常(这可能导致您的应用程序失败,而您实际上并不知道为什么)。您应该能够(通过阅读文档或进行实