下面的流程是 API 27,不同的版本之間差異不大,但在細(xì)節(jié)上有區(qū)別。
點(diǎn)擊桌面應(yīng)用圖標(biāo)或自己程序啟動Activity過程,由于過程比較長,所以分段來介紹。
從 Activity#startActivity 到切換到 ActivityThread 的過程
這部分比較繁瑣切沒太大意思,不同的版本走的過程有些差異。

activity01.png
ActivityThread 到調(diào)起 onCreate 過程
下面的代碼你可以注意到下面幾點(diǎn)
- ApplicationThread 實(shí)現(xiàn)了 IApplicationThread.Stub
- ActivityThread 是程序的入口,可以看到 main 方法,在 main 中關(guān)聯(lián) Looper,
- Activity 是通過反射創(chuàng)建的,Instrumentation 這類關(guān)系到 Activity 的生命周期,可以通過 hook Instrumentation 實(shí)現(xiàn)插件化。

activity02.png
具體的代碼就不帖了,自己畫一張流程圖比簡單的貼代碼更直觀。