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

Android: как регистрировать все вызовы методов работы?

Я хотел бы иметь быстрый способ иметь возможность записывать все вызовы во все супер методы, вызываемые действием.

Я пробовал это https://github.com/stephanenicolas/loglifecycle

но по какой-то причине он не работает с AppCompatActivity...

Я мог бы попросить мою IDE переопределить все методы; но как добавить Log для всех из них? Вручную? Должен быть способ...

4b9b3361

Ответ 1

Вы можете пойти и поиграть с stacktrace

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();

Из документов:

Последний элемент массива представляет нижнюю часть стека, который является наименее недавним вызовом метода в последовательности.

РЕДАКТИРОВАТЬ: Похоже, что здесь есть целый пост ЗДЕСЬ

Ответ 2

Пришло время искать AspectJ http://code.google.com/p/android-aspectj/ и это идеальная статья http://fernandocejas.com/2014/08/03/aspect-oriented-programming-in-android/

вам просто нужно настроить выполнение аспект.

aspect Trace{
    pointcut traceMethods() : (execution(* com.xyz.*.*(..)));

    before(): traceMethods(){
        Signature sig = thisJoinPointStaticPart.getSignature();
        String sourceName =  thisJoinPointStaticPart.getSourceLocation().getWithinType().getCanonicalName();
        Log.d("AOPLogging: " + sourceName,  "Some method has called")
   }
}

о выражениях, которые вы могли бы прочитать на AOP

Ответ 3

Редакция: Если вы можете позволить себе использовать только API 14+, вы можете использовать

public void registerActivityLifecycleCallbacks (Application.ActivityLifecycleCallbacks callback)

в приложении (https://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks))

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

abstract void   onActivityCreated(Activity activity, Bundle savedInstanceState)
abstract void   onActivityDestroyed(Activity activity)
abstract void   onActivityPaused(Activity activity)
abstract void   onActivityResumed(Activity activity)
abstract void   onActivitySaveInstanceState(Activity activity, Bundle outState)
abstract void   onActivityStarted(Activity activity)
abstract void   onActivityStopped(Activity activity)