1、 源码分析方式
-主动调用型,跟着源码一步步一行行的分析(如startActivity)
-被动调用型,即我们可能只知道结果方法,回调方法,需要反推从哪里调用过来的(如Activity的onCreate)
2、日志打印技巧
java端跟踪调用堆栈方法
Log.i("test1","oncreate",new Exception());
/**
* Send a {@link #INFO} log message and log the exception.
* @param tag Used to identify the source of a log message. It usually identifies
* the class or activity where the log call occurs.
* @param msg The message you would like logged.
* @param tr An exception to log
*/
public static int i(String tag, String msg, Throwable tr) {
return println(LOG_ID_MAIN, INFO, tag, msg + '\n' + getStackTraceString(tr));
}
3、日志分析
######联系人进程调用startActivity,会最后调用AMS的startActivity 07-18 16:56:49.770 2590 2590 I test1 : client execStartActivity 07-18 16:56:49.770 2590 2590 I test1 : java.lang.Exception 07-18 16:56:49.770 2590 2590 I test1 : at android.app.Instrumentation.execStartActivity(Instrumentation.java:1611) 07-18 16:56:49.770 2590 2590 I test1 : at android.app.Activity.startActivityForResult(Activity.java:4493) 07-18 16:56:49.770 2590 2590 I test1 : at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) 07-18 16:56:49.770 2590 2590 I test1 : at android.support.v4.app.FragmentActivity.startActivityForResult(Unknown Source:0) 07-18 16:56:49.770 2590 2590 I test1 : at android.app.Activity.startActivityForResult(Activity.java:4451) 07-18 16:56:49.770 2590 2590 I test1 : at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:725) 07-18 16:56:49.770 2590 2590 I test1 : at android.app.Activity.startActivity(Activity.java:4812) 07-18 16:56:49.770 2590 2590 I test1 : at android.app.Activity.startActivity(Activity.java:4780) 07-18 16:56:49.770 2590 2590 I test1 : at com.android.contacts.util.ImplicitIntentsUtil.startActivityInApp(ImplicitIntentsUtil.java:82) 07-18 16:56:49.770 2590 2590 I test1 : at com.android.contacts.util.AccountFilterUtil.startEditorIntent(AccountFilterUtil.java:205) 07-18 16:56:49.770 2590 2590 I test1 : at com.android.contacts.activities.PeopleActivityPerformClick.run(View.java:24770) 07-18 16:56:49.770 2590 2590 I test1 : at android.os.Handler.handleCallback(Handler.java:790) 07-18 16:56:49.770 2590 2590 I test1 : at android.os.Handler.dispatchMessage(Handler.java:99) 07-18 16:56:49.770 2590 2590 I test1 : at android.os.Looper.loop(Looper.java:164) 07-18 16:56:49.770 2590 2590 I test1 : at android.app.ActivityThread.main(ActivityThread.java:6494) 07-18 16:56:49.770 2590 2590 I test1 : at java.lang.reflect.Method.invoke(Native Method) 07-18 16:56:49.770 2590 2590 I test1 : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 07-18 16:56:49.770 2590 2590 I test1 : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
##########System_server进程的AMS startActivity 打印,从方法堆栈在可以看出属于binder驱动调用,肯定无法看到联系人进程的堆栈 07-18 16:56:49.774 1522 1533 I test1 : system_server startActivity callingPackage == com.android.contacts 07-18 16:56:49.774 1522 1533 I test1 : java.lang.Exception 07-18 16:56:49.774 1522 1533 I test1 : at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4519) 07-18 16:56:49.774 1522 1533 I test1 : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121) 07-18 16:56:49.774 1522 1533 I test1 : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2919) 07-18 16:56:49.774 1522 1533 I test1 : at android.os.Binder.execTransact(Binder.java:697)
##########System_server进程的AMS一切处理完毕,需要通知联系人进程拉起新的Activity 07-18 16:56:49.779 1522 1533 I test1 : system_server app.thread.scheduleLaunchActivity 07-18 16:56:49.779 1522 1533 I test1 : java.lang.Exception 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1457) 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1580) 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:2726) 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2255) 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2094) 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1486) 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:1413) 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:7442) 07-18 16:56:49.779 1522 1533 I test1 : at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:317) 07-18 16:56:49.779 1522 1533 I test1 : at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2919) 07-18 16:56:49.779 1522 1533 I test1 : at android.os.Binder.execTransact(Binder.java:697)
##########通过binder通信调用到了联系人进程的scheduleLaunchActivity方法 07-18 16:56:49.800 2590 2703 D test1 : scheduleLaunchActivity 07-18 16:56:49.800 2590 2703 D test1 : java.lang.Exception 07-18 16:56:49.800 2590 2703 D test1 : at android.app.ActivityThreadStub.onTransact(IApplicationThread.java:196) 07-18 16:56:49.800 2590 2703 D test1 : at android.os.Binder.execTransact(Binder.java:697)
##########联系人应用的主线程调用Activity的onCreate方法 07-18 16:56:49.808 2590 2590 I test1 : Activity onCreate 07-18 16:56:49.808 2590 2590 I test1 : java.lang.Exception 07-18 16:56:49.808 2590 2590 I test1 : at android.app.Activity.onCreate(Activity.java:995) 07-18 16:56:49.808 2590 2590 I test1 : at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66) 07-18 16:56:49.808 2590 2590 I test1 : at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:290) 07-18 16:56:49.808 2590 2590 I test1 : at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84) 07-18 16:56:49.808 2590 2590 I test1 : at com.android.contacts.activities.AppCompatTransactionSafeActivity.onCreate(AppCompatTransactionSafeActivity.java:33) 07-18 16:56:49.808 2590 2590 I test1 : at com.android.contacts.AppCompatContactsActivity.onCreate(AppCompatContactsActivity.java:81) 07-18 16:56:49.808 2590 2590 I test1 : at com.android.contacts.activities.ContactEditorActivity.onCreate(ContactEditorActivity.java:315) 07-18 16:56:49.808 2590 2590 I test1 : at android.app.Activity.performCreate(Activity.java:7005) 07-18 16:56:49.808 2590 2590 I test1 : at android.app.Activity.performCreate(Activity.java:6996) 07-18 16:56:49.808 2590 2590 I test1 : at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 07-18 16:56:49.808 2590 2590 I test1 : at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) 07-18 16:56:49.808 2590 2590 I test1 : at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 07-18 16:56:49.808 2590 2590 I test1 : at android.app.ActivityThread.-wrap11(Unknown Source:0) 07-18 16:56:49.808 2590 2590 I test1 : at android.app.ActivityThreadMethodAndArgsCaller.run(RuntimeInit.java:438) 07-18 16:56:49.808 2590 2590 I test1 : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)