Android: как регистрировать все вызовы методов работы?
Я хотел бы иметь быстрый способ иметь возможность записывать все вызовы во все супер методы, вызываемые действием.
Я пробовал это https://github.com/stephanenicolas/loglifecycle
но по какой-то причине он не работает с AppCompatActivity
...
Я мог бы попросить мою IDE переопределить все методы; но как добавить Log для всех из них? Вручную? Должен быть способ...
Ответы
Ответ 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)