android 中通过Thread.UncaughtExceptionHandler用于处理未捕获的异常导致程序崩溃。
firebase crashlytics也是基于该方法实现捕获异常。
集成firebase crashlytics无法收集日志原因:
1、项目由于项目需求,需要捕获应用异常进行相应的处理。然后在Application的onCreate()生命周期方法中进行设置。
然而现在firebase sdk都是使用provider进行sdk的初始化。由于provider和生命周期和Application类似(详细查考provider的架加载原理),导致如果自己在Application 的onCreateI()方法中进行设置,就会把Firebase中的进行重新初始化。导致firebase无法收集到异常崩溃日志。
解决方案:
a、删除掉项目中自己对异常日志收集的处理。
b、将自己设置的异常处理,移动到Application 的attachBaseContext(Context context)中做处理。
为什么这样设置后,firebase和自己设置的异常处理都可以工作?
参看firebase初始化代码。
【firebase会获取app设置的Thread.UncaughtExceptionHandler异常的实例对象,firebase新建一个异常实例进行初始化,当有异常发生时,使用获取的项目设置的异常实例对象,调用其方法】