在使用Crashlytics SDK时,如何在发生崩溃时进行回调?

and*_*per 4 android crashlytics

背景

我们使用Crashlytics SDK来管理应用程序崩溃并获取有关它们的所需信息.

到目前为止,SDK自动收集的信息已足够

问题

我想为每次崩溃添加更多信息,例如:可用和总堆内存,活动堆栈,......

事实是,我没有看到实现这一目标的方法.

我知道Android框架使用未处理的异常的方式非常简单(使用Thread.setDefaultUncaughtExceptionHandler),它可能是SDK的工作原理,但我找不到在哪里使用SDK本身的监听器.

我试过的

  1. 该SDK有一个监听器,但似乎这不是当前会话的,如图所示这里.函数名称为"crashlyticsDidDetectCrashDuringPreviousExecution",表示它是上一个会话的名称.之前在已弃用的方法中可以使用相同的回调.

  2. 有" 自定义日志记录 "和" 自定义键 "功能,但是当我调用它们时会发生这些功能(发生崩溃时不正确).

这个问题

有没有办法在发生崩溃时立即向Crashlytics添加额外信息?

如果是这样,怎么样?

Cli*_*gts 11

尝试创建UncaughtExceptionHandler并使用Custom Key(s)存储要与崩溃报告关联的信息.

  1. 创建自定义UncaughtExceptionHandler(确保它将异常传递给默认的UncaughtExceptionHandler,稍后通过Crashlytics处理).
  2. uncaughtException方法中添加自定义逻辑来设置您的密钥,例如Crashlytics.setString("available_memory", "5784");

  3. 当您的应用崩溃时,请检查您的Crashlytics信息中心以查看您的自定义键

创建一个自定义Application子类来保存您的逻辑:

public class MyApplication extends Application {
   private static Thread.UncaughtExceptionHandler mDefaultUncaughtExceptionHandler;

   private static Thread.UncaughtExceptionHandler mCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
       @Override
       public void uncaughtException(Thread thread, Throwable ex) {
          // Custom logic goes here
          // Calculate available memory
          Crashlytics.setString("available_memory", "5784");
          // This will make Crashlytics do its job
          mDefaultUncaughtExceptionHandler.uncaughtException(thread, ex);
       }
   };

   @Override
   public void onCreate() {
     super.onCreate();

     // Order is important!
     // First, start Crashlytics
     Crashlytics.start(this);

     // Second, cache a reference to default uncaught exception handler
     mDefaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
     // Third, set custom UncaughtExceptionHandler
     Thread.setDefaultUncaughtExceptionHandler(mCaughtExceptionHandler);
   }
}
Run Code Online (Sandbox Code Playgroud)

请记住在AndroidManifest.xml的标记中指定Application子类的名称

<application android:name="MyApplication">
Run Code Online (Sandbox Code Playgroud)

  • 是的,它的工作方式和 Crashlytics 的工作方式相同,但不同之处在于您的自定义 UncaughtExceptionHandler 将执行,然后您调用默认的 UncaughtExceptionHandler (Crashlytics),然后执行。 (2认同)