Pull to refresh
9
0
Александр Попсуенко @mefi100fell

Делаю инфру для мобилок

Send message

Используется аспектно-ориентированное программировние. Статья1 и статья2.

И такой код для того, чтобы замерить время выполнения создания инстанса через Dagger2.

@Aspect
public final class InjectedConstructorAspect extends AspectJExtension {

    @Pointcut("call(@javax.inject.Inject *.new(..))")
    public void injectConstructor() {
        // Выбираем вызовы конструкторов с аннотацией @Inject
    }

    @SuppressWarnings("UnknownNullness")
    @Around("injectConstructor()")
    public Object proceedAndMeasure(@NonNull final ProceedingJoinPoint joinPoint) throws Throwable {
        final long start = currentMillis();
        final Object result = joinPoint.proceed();
        final long stop = currentMillis();
        DiagnosticEventDispatcher.injectedConstructorExecutedEvent(
                start, stop,
                result.getClass()
        );
        return result;
    }

}

Также есть экстеншены для того, чтобы замерять время создания объектов, которые не создаются через Dagger2:

  • Activity

  • Fragment

  • Presenter (Если создаётся через аннотацию Moxy @ProvidePresenter)

Тулза работает только у разработчика, то есть в проде нет ни следа от неё. Включается только через специальный тип сборки, так как развешивать и выполнять join'ы - не бесплатно.

Ну и есть экран, в котором отображаются результаты, полученные в DiagnosticEventDispatcher

Отображается время создания инстанса (в персентиле) и количество созданных объектов конкретного класса.

Написал ребятам. Надеюсь у них получится запланировать работы

Не пробовали такое решение.

Это, я так понимаю, в качестве альтернативы Timeline.

Мы используем Timeline и в проде, чтобы пользователи, у кого есть доступ к меню разработчика, могли делиться таймлайнами с внутренней информацией о запросах и т.п.

Для прода Macrobenchmark не особо подходит.

Но для своих кейсов - норм.

Интересно, что ребята делают крутые(для меня) штуки, но targetSdk все еще меньше 23 и если отнять разрешение, то приложение больше его не просит, а пишет, что нет фоток или еще чего-то.
Отличная статья. Спасибо. Особенно за главный посыл: «Все мы пираты по натуре».
Отличная статья.
Для тех, кто до сих пор задается вопросами о стратегиях, все разжевано и в рот положено.
Пользуюсь Moxy больше года, рад, как удав.
Стиль кода. Смердит.
Сделал бы классы, которые выполняли вышеизложенные функции, а не активити.
А так, у меня этого кода уже давно нет. И слава богу.
Но на тот момент для меня это был прорыв, да и материалов по этой теме особо не было, вот и написал.
Отличная статья. Спасибо Евгению.
Сэкономила и ещё сэкономит кучу времени в поисках нужной информации и её осмысления.
Два года назад ДЛЯ МЕНЯ это БЫЛО великолепно.
Понял, спасибо.
У меня как раз сегодня появилось место для использования этого wrapper-а.
Спасибо за обертку над Cursor.
А в каком месте закрывать Cursor? Наверное, нужно добавить метод close к DbList?

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity