以 sdk 23 源碼為例:
Activity.java:
startActivity(Intent)
==> startActivity(Intent, Bundle)
==> startActivityForResult(Intent, int, Bundle)
Instrumentation.java:
==> execStartActivity(Context, IBinder, IBinder, Activity, Intent, int, Bundle)
ActivityManagerNative.java:
==> getDefault() 返回 ActivityManagerProxy 對象
==> ActivityManagerProxy#startActivity(...)
調用 mRemote.transact(...) 進行 IPC 調用
==> ActivityManagerNative.onTransact(int, Parcel, Parcel, int)
ActivityManagerService.java:
==> startActivity(...)
==> startActivityAsUser(...)
ActivityStackSupervisor.java:
==> startActivityMayWait(...)
==> startActivityLocked(...)
==> startActivityUncheckedLocked(...)
ActivityStack.java:
==> resumeTopActivityLocked(...)
==> resumeTopActivityInnerLocked(...)
ActivityStackSupervisor.java:
==> startSpecificActivityLocked(...)
==> realStartActivityLocked(...)
調用 app.thread.scheduleLaunchActivity(...)
ApplicationThreadNative.java:
==> ApplicationThreadNative$ApplicationThreadProxy#scheduleLaunchActivity(...)
調用 mReote.transact(...) 進行 IPC 調用
==> ApplicationThreadNative#onTransact(...)
ActivityThread.java
==> ActivityThread$
ApplicationThread#scheduleLaunchActivity(...)
通過 Handler 發送消息 LAUNCH_ACTIVITY
==> ActivityThread$
H#handleMessage(...)
==> handleLaunchActivity(...)
==> performLaunchActivity(...)
創建 Activity 實例并調用 attach(...) 方法,
同時調用 Instrumentation#callActivityOnCreate() 方法,
Activity.java:
==> performCreate(...)
==> onCreate(...)
至此,你終于看到了你熟悉的 onCreate(...) 方法!