Подтвердить что ты не робот

Ленивая инициализация комплектов 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());
    }
4b9b3361

Ответ 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);