背景
我们使用 Crashlytics SDK 来管理应用程序崩溃并获取有关它们的所需信息。
到目前为止,SDK自动收集的信息已经足够了
问题
我想为每次崩溃添加更多信息,例如:可用和总堆内存、 Activity 堆栈...
问题是,我看不到实现这一目标的方法。
我知道 Android 框架处理未处理异常的方式非常简单(使用 Thread.setDefaultUncaughtExceptionHandler )并且 SDK 可能就是这样工作的,但我找不到在哪里使用 SDK 本身的监听器。
我尝试过的
SDK 有一个监听器,但它似乎不是当前 session 的,如图所示here .函数名称是 "crashlyticsDidDetectCrashDuringPreviousExecution",这意味着它是上一个 session 的。之前在弃用的方法中提供了相同的回调。
有“Custom Logging”和“Custom Keys”功能,但这些功能是在我调用它们时出现的(当崩溃发生时不正确)。
问题
有没有办法在发生崩溃时立即向 Crashlytics 添加额外信息?
如果是,怎么做到的?
最佳答案
尝试创建一个 UncaughtExceptionHandler 并使用 Custom Key(s)存储您希望与崩溃报告相关联的信息。
- 创建您的自定义 UncaughtExceptionHandler ( ensuring that it will pass exception to default UncaughtExceptionHandler to be handled later via Crashlytics )。
在
uncaughtException
方法中添加自定义逻辑来设置您的 key ,例如Crashlytics.setString("available_memory", "5784");
检查您的 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/