#java #android #android_studio #логирование
Как можно развернуть во времени событийную последовательность вызова процедур указанных классов приложения? На примере Activity lifecycle, в onCreate, onResume, onPause и т.д. - в каждый метод можно вручную вставлять вызов Log.d. В LogCat после чего становится понятна последовательность вызовов. Подобное хотелось бы осуществлять в других классах исходных примеров, в которых может быть намного больше методов. Имеется ли автоматизация Log.d или аналогичный инструментарий? Методом trace получается много излишней информации над которой требуются дополнительные манипуляции при изучении. Или trace все же единственный подходящий способ?!
Ответы
Ответ 1
Можно воспользоваться Аспектно - Ориентированным Программированием. Добавить зависимости: build.gradle dependencies { ... classpath 'com.uphyca.gradle:gradle-android-aspectj-plugin:0.9.14' } app/build.gradle apply plugin: "android-aspectj" ... dependencies { ... compile 'org.aspectj:aspectjrt:1.8.9' } Написать аспект: LogAspect.java @Aspect public class LogAspect { private static final String TAG = "aspect"; @Before("execution(* *(..)) ") public void doBeforeAyMethod(JoinPoint joinPoint) { if(joinPoint.getTarget() != null) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); Log.i(TAG, joinPoint.getTarget().getClass().getSimpleName() + " : " + method.getName()); } } } Теперь все методы классов вашего приложения пропишутся в лог. Стоит помнить, что это сработает с методами непосредственно находящимися в классе, методы суперкласса не упадут в лог, только если они будут переопределены. А если написать свою аннотацию, например: MethodLog.java @Target(ElementType.TYPE) public @interface MethodLog { } Проаннотировать ею нужные классами, и добавить в аспект: @Before("execution(* *(..)) && @within(MethodLog)") В лог упадут методы только выбранных классов.
Комментариев нет:
Отправить комментарий