分析源码的方式
1.主动调用,跟随源码一步步分析,如分析Activity
的startActivity
的过程
2.被动调用,如分析Activity
的onCreate
方式是如何调用的?
日志打印技巧
Log有如下形式的方法,带有一个Throwable
参数:
public static int d (String tag,
String msg,
Throwable tr)
所以可使用如下的形式打log,可显示调用的堆栈
android.util.Log.i("wztest", "Activity onCreate", new Exception());
如上,比如在Activity的onCreate
方法中添加log,可显示调用onCreate
的堆栈过程
05-23 21:48:43.084 1831 1831 I wztest : Activity onCreate
05-23 21:48:43.084 1831 1831 I wztest : java.lang.Exception
05-23 21:48:43.084 1831 1831 I wztest : at android.app.Activity.onCreate(Activity.java:990)
05-23 21:48:43.084 1831 1831 I wztest : at com.android.settings.FallbackHome.onCreate(FallbackHome.java:65)
05-23 21:48:43.084 1831 1831 I wztest : at android.app.Activity.performCreate(Activity.java:7000)
05-23 21:48:43.084 1831 1831 I wztest : at android.app.Activity.performCreate(Activity.java:6991)
05-23 21:48:43.084 1831 1831 I wztest : at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
05-23 21:48:43.084 1831 1831 I wztest : at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
05-23 21:48:43.084 1831 1831 I wztest : at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
05-23 21:48:43.084 1831 1831 I wztest : at android.app.ActivityThread.-wrap11(Unknown Source:0)
05-23 21:48:43.084 1831 1831 I wztest : at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
05-23 21:48:43.084 1831 1831 I wztest : at android.os.Handler.dispatchMessage(Handler.java:106)
05-23 21:48:43.084 1831 1831 I wztest : at android.os.Looper.loop(Looper.java:164)
05-23 21:48:43.084 1831 1831 I wztest : at android.app.ActivityThread.main(ActivityThread.java:6494)
05-23 21:48:43.084 1831 1831 I wztest : at java.lang.reflect.Method.invoke(Native Method)
05-23 21:48:43.084 1831 1831 I wztest : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
05-23 21:48:43.084 1831 1831 I wztest : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)