是否有可能懒洋洋地初始化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());
}
答案 0 :(得分:3)
您可以使用构建器模式进行初始化,并可以在调试模式下禁用崩溃报告:
CrashlyticsCore core =
new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build(), new Crashlytics());
更新1:之后添加更多Kit或者Fabric工具包的Lazy初始化?:
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);
答案 1 :(得分:1)
Mike来自Fabric。目前,我们只尊重Fabric的第一次初始化。一种选择是在前面初始化所有内容,或者如果你可以错过一些崩溃,而不是在你的应用程序代码中稍后初始化Twitter和Crashlytics。