下面的流程是 API 27,不同的版本之間差異不大,但在細節上有區別。
點擊桌面應用圖標或自己程序啟動Activity過程,由于過程比較長,所以分段來介紹。
從 Activity#startActivity 到切換到 ActivityThread 的過程
這部分比較繁瑣切沒太大意思,不同的版本走的過程有些差異。
activity01.png
ActivityThread 到調起 onCreate 過程
下面的代碼你可以注意到下面幾點
- ApplicationThread 實現了 IApplicationThread.Stub
- ActivityThread 是程序的入口,可以看到 main 方法,在 main 中關聯 Looper,
- Activity 是通過反射創建的,Instrumentation 這類關系到 Activity 的生命周期,可以通過 hook Instrumentation 實現插件化。
activity02.png
具體的代碼就不帖了,自己畫一張流程圖比簡單的貼代碼更直觀。