Ленивая инициализация комплектов Fabric?
Можно ли лениво инициализировать комплекты тканей? например, прямо сейчас:
Fabric.with(this, crashlytics, twitterCore, tweetUi); // 500ms
Я хотел бы инициализировать только Crashlytics (без твиттера), как показано ниже, потому что он в 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());
}
Ответы
Ответ 1
Майк из Ткань. В настоящее время мы только уважаем первую инициализацию Fabric. Один из вариантов должен был бы инициализировать все впереди, или если вы в порядке, чтобы пропустить некоторые сбои, не инициализируйте Twitter и Crashlytics до тех пор, пока в коде приложения не появится.
Ответ 2
Вы можете использовать шаблон построителя для инициализации и можете отключить отчет о сбое в режиме отладки:
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);