13

是否可以延迟初始化 Fabric Kits?例如,现在我这样做:

Fabric.with(this, crashlytics, twitterCore, tweetUi); // 500ms

我只想初始化 Crashlytics(没有 twitter 的东西),如下所示,因为它快 10 倍,而且我不需要马上使用 Twitter 的东西

Fabric.with(this, crashlytics); // 50ms

稍后,当用户访问我需要 TwitterCore 和 TweetUi 的活动时,我想在使用它们之前将它们即时添加到 Fabric 中。

这可能吗 ?

编辑: 我设法通过反射来做到这一点,这显然并不理想,但它暂时有效。我仍在寻找适当的解决方案。我是这样做的:

    try {
        final Fabric newFabric = (new Fabric.Builder(context)).kits(crashlytics, twitterCore, tweetUi).build();
        final Method method = Fabric.class.getDeclaredMethod("setFabric", Fabric.class);
        method.setAccessible(true);
        method.invoke(null, newFabric);
    } catch (Exception e) {
        Timber.e(e, e.getMessage());
    }
4

2 回答 2

3

您可以使用构建器模式进行初始化,并可以在调试模式下禁用崩溃报告:

CrashlyticsCore core =
    new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build(), new Crashlytics());

更新 1:之后添加更多套件或延迟初始化 Fabric 套件?:

CrashlyticsCore core =
    new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
//Store the below fabric as an instance member
Fabric fabric = Fabric.with(this, new Crashlytics.Builder().core(core).build(), new Crashlytics
    ());
//To add later:
fabric.getKits().add(YOUR_NEW_KIT);
于 2017-04-11T12:29:16.643 回答
1

来自 Fabric 的 Mike。目前,我们只尊重 Fabric 的第一次初始化。一种选择是预先初始化所有内容,或者如果您可以错过一些崩溃,请在稍后在您的应用程序代码中初始化 Twitter 和 Crashlytics。

于 2017-04-13T12:06:17.693 回答