Crashlytics中的公共方法,用于记录未捕获的异常

时间:2017-04-19 17:25:24

标签: android crashlytics-android uncaughtexceptionhandler google-fabric

我们通常在主线程的Application.onCreate()方法的早期阶段初始化Crashlytics。 Crashlytics的初始化过程通常非常快,但在某些设备上仍可能需要超过2帧且长达32ms。由于我们不断改进冷启动时间,我们考虑将Crashlytics初始化放入后台线程,关注的是我们是否仍然可以在Crashlytics初始化之前捕获崩溃。

我们这里的方法是首先设置一个CustomDefaultUncaughtExceptionHandler并尽早初始化Crashlyatics,但是在后台线程中。如果我们在Crashlytics初始化或初始化之前遇到崩溃,我们将在CustomDefaultUncaughtExceptionHandler中重新初始化Crashlytics,并使用反射来获取CrashlyticsCore的CrashlyticsUncaughtExceptionHandler,然后记录此未捕获的异常。

我们的问题是,是否有可能为我们提供一个公共方法来记录未捕获的异常,以便我们不必使用反射。或者,如果我们有其他建议将Crashlytics初始化卸载到后台线程,但也能够捕获早期异常。

伪代码如下所示:

    public void uncaughtException(Thread thread, Throwable ex) {
        try {
            if (_crashlyticsEnabled) {
                if (!_crashlyticsInitialized) {
                    // IMPORTANT: in case we encounter a crash before the crashlytics is
                    // initialized, we can initialize crashlytics here and send this crash
                    // to the server right away.
                    initCrashlytics(_context);
                    Crashlytics.logUncaughtException(thread, ex); // API we are asking
                }
            }
        } catch (Exception e) {
            PLog.error(e, "Exception occurred during ...");
        } finally {
            _defaultExceptionHandler.uncaughtException(thread, ex);
        }
    }

0 个答案:

没有答案