我们使用Crashlytics SDK来管理应用崩溃并获取有关它们的所需信息。
到目前为止,SDK自动收集的信息已足够
我想为每次崩溃添加更多信息,例如:可用和总堆内存,活动堆栈,......
事情是,我没有办法实现这一目标。
我知道Android框架使用未处理的异常的方式非常简单(使用Thread.setDefaultUncaughtExceptionHandler),它可能是SDK的工作方式,但我无法找到使用监听器的位置SDK本身。
SDK有一个监听器,但它似乎不属于当前会话,如here所示。函数名称为" crashlyticsDidDetectCrashDuringPreviousExecution" ,意思是前一届会议。在弃用的方法之前,可以使用相同的回调。
有" Custom Logging"和" Custom Keys"功能,但是当我调用它们时会发生这些功能(发生崩溃时不正确)。
有没有办法在发生崩溃时立即向Crashlytics添加额外信息?
若然,怎么样?
答案 0 :(得分:10)
尝试创建UncaughtExceptionHandler并使用Custom Key(s)存储要与崩溃报告关联的信息。
在uncaughtException
方法中添加自定义逻辑以设置密钥,例如Crashlytics.setString("available_memory", "5784");
检查您的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);
}
}
请记住在AndroidManifest.xml的标记
中指定Application子类的名称<application android:name="MyApplication">