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

标签 android crashlytics

背景

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

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

问题

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

问题是,我看不到实现这一目标的方法。

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

我尝试过的

  1. SDK 有一个监听器,但它似乎不是当前 session 的,如图所示here .函数名称是 "crashlyticsDidDetectCrashDuringPreviousExecution",这意味着它是上一个 session 的。之前在弃用的方法中提供了相同的回调。

  2. 有“Custom Logging”和“Custom Keys”功能,但这些功能是在我调用它们时出现的(当崩溃发生时不正确)。

问题

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

如果是,怎么做到的?

最佳答案

尝试创建一个 UncaughtExceptionHandler 并使用 Custom Key(s)存储您希望与崩溃报告相关联的信息。

  1. 创建您的自定义 UncaughtExceptionHandler ( ensuring that it will pass exception to default UncaughtExceptionHandler to be handled later via Crashlytics )。
  2. uncaughtException 方法中添加自定义逻辑来设置您的 key ,例如Crashlytics.setString("available_memory", "5784");

  3. 检查您的 Crashlytics 仪表板以查看您的应用程序崩溃时的自定义 key

创建自定义应用程序子类来保存您的逻辑:

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);
   }
}

请记住在 AndroidManifest.xml 的标签中指定您的应用程序子类的名称

<application android:name="MyApplication">

关于android - 使用 Crashlytics SDK 时如何在发生崩溃时进行回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37256595/

相关文章:

java - 我的逻辑有什么问题,我无法确定从左边开始还是从底部开始连续有3个?

ios - Fabric Crashlytics 崩溃状态 View 中显示的版本号是多少?

Android Firebase Crashlytics NDK 回溯缺少帧

ios - 即使崩溃发生在 applicationDidFinishLaunching 中,crashlytics 如何设法上传崩溃日志?

ios - dSYM 未通过 CLI 命令上传

android - 我需要等到监听器将 bool 值从 null 更改为 false/true java

java - 在单例中保留对线程的引用是否安全?

android - Holo.Light 主题但有白色溢出点?

java - 如何将增量发票编号放入DatabaseReference

android - Crashlytics Android Studio 无法运行 : NoClassDefFoundError: javax/swing/SwingUtilities