Используется аспектно-ориентированное программировние. Статья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 и в проде, чтобы пользователи, у кого есть доступ к меню разработчика, могли делиться таймлайнами с внутренней информацией о запросах и т.п.
Интересно, что ребята делают крутые(для меня) штуки, но targetSdk все еще меньше 23 и если отнять разрешение, то приложение больше его не просит, а пишет, что нет фоток или еще чего-то.
Стиль кода. Смердит.
Сделал бы классы, которые выполняли вышеизложенные функции, а не активити.
А так, у меня этого кода уже давно нет. И слава богу.
Но на тот момент для меня это был прорыв, да и материалов по этой теме особо не было, вот и написал.
Используется аспектно-ориентированное программировние. Статья1 и статья2.
И такой код для того, чтобы замерить время выполнения создания инстанса через Dagger2.
Также есть экстеншены для того, чтобы замерять время создания объектов, которые не создаются через Dagger2:
Activity
Fragment
Presenter (Если создаётся через аннотацию Moxy
@ProvidePresenter
)Тулза работает только у разработчика, то есть в проде нет ни следа от неё. Включается только через специальный тип сборки, так как развешивать и выполнять join'ы - не бесплатно.
Ну и есть экран, в котором отображаются результаты, полученные в
DiagnosticEventDispatcher
Отображается время создания инстанса (в персентиле) и количество созданных объектов конкретного класса.
Написал ребятам. Надеюсь у них получится запланировать работы
Не пробовали такое решение.
Это, я так понимаю, в качестве альтернативы Timeline.
Мы используем Timeline и в проде, чтобы пользователи, у кого есть доступ к меню разработчика, могли делиться таймлайнами с внутренней информацией о запросах и т.п.
Для прода Macrobenchmark не особо подходит.
Но для своих кейсов - норм.
Для тех, кто до сих пор задается вопросами о стратегиях, все разжевано и в рот положено.
Пользуюсь Moxy больше года, рад, как удав.
Сделал бы классы, которые выполняли вышеизложенные функции, а не активити.
А так, у меня этого кода уже давно нет. И слава богу.
Но на тот момент для меня это был прорыв, да и материалов по этой теме особо не было, вот и написал.
Сэкономила и ещё сэкономит кучу времени в поисках нужной информации и её осмысления.
У меня как раз сегодня появилось место для использования этого wrapper-а.
А в каком месте закрывать Cursor? Наверное, нужно добавить метод close к DbList?