Android:如何记录所有Activity方法调用?

时间:2015-04-30 16:58:27

标签: android android-lifecycle

我希望能够快速记录对活动调用的所有超级方法的所有调用。

我试过这个https://github.com/stephanenicolas/loglifecycle

但由于某种原因,它不适用于AppCompatActivity ...

我可以要求我的IDE覆盖所有方法;但是如何将Log添加到所有这些?手动?必须有办法..

3 个答案:

答案 0 :(得分:11)

你可以到处玩堆栈跟踪

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

来自文档:

  

数组的最后一个元素表示堆栈的底部,   这是序列中最近的方法调用。

编辑:似乎有关于此HERE的完整帖子

答案 1 :(得分:4)

是时候寻找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

上阅读的表达方式

答案 2 :(得分:4)

<强>编辑: 如果你能负担得起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)