Android 中 startActivity() 執行流程

以 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(...) 方法!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容