我系蒼王,歡迎關(guān)注的源碼分析的第四節(jié)
歡迎瀏覽我之前的文章捐凭,有興趣可以參考一下,可以給個(gè)喜歡或者關(guān)注我的文章茁肠,謝謝。
[Android]如何做一個(gè)崩潰率少于千分之三噶應(yīng)用app(9)-Small插件化
四.InstumentationWrapper生命周期
什么是Instrumentation匹颤?
Instrumentation是執(zhí)行application instrumentation代碼的基類印蓖。當(dāng)應(yīng)用程序運(yùn)行的時(shí)候instrumentation處于開啟,Instrumentation將在任何應(yīng)用程序運(yùn)行前初始化赦肃,可以通過(guò)它監(jiān)測(cè)系統(tǒng)與應(yīng)用程序之間的交互公浪。Instrumentation implementation通過(guò)的AndroidManifest.xml中的標(biāo)簽進(jìn)行描述。
Instrumentation似乎有些類似與window中的“鉤子(Hook)函數(shù)”欠气,在系統(tǒng)與應(yīng)用程序之間安裝了個(gè)“竊聽器”。
這個(gè)類的作用非常重要队塘,它是創(chuàng)建Activity,Application,等組件的一個(gè)分水嶺,簡(jiǎn)單的說(shuō)憔古,它是ActivityThread的一個(gè)管家吧顾翼。
下面說(shuō)一下Small里面替換了Instumentation的處理
1.execStartActivity用于啟動(dòng)替換已經(jīng)占坑的Activity,通過(guò)wrapIntent來(lái)包裝intent
熟悉Activity啟動(dòng)流層灸芳,應(yīng)該都有看到Instumentation這個(gè)類中的execStartActivity用于調(diào)用Native層去啟動(dòng)Activity的涝桅。
在nativite層最終進(jìn)入前hook掉啟動(dòng)接口的意義在于冯遂,避免framework層系統(tǒng)的命名檢查谒获。
2.callActivityOnCreate這個(gè)是Activity調(diào)用OnCreate調(diào)用的系統(tǒng)流程
? ? ? ? ?applyActivityInfo是用來(lái)恢復(fù)Activity的一些轉(zhuǎn)屏和鍵盤狀態(tài)
sHostInstumentation是原來(lái)反射前的Instumentation,依然是需要原來(lái)Instumentation調(diào)用流程的
最后需要反射我們的自己的sBundleInstumentation到系統(tǒng)mInstumentation屬性里面
3.callActivityOnStop暫停的時(shí)候裸准,會(huì)調(diào)用檢測(cè)是否更新赔硫,如果需要更新,通過(guò)遍歷process來(lái)封裝到一個(gè)列表里面爪膊,去kill掉每個(gè)process权悟。
4.callActivityOnDestroy對(duì)應(yīng)的是onDestroy流程
inqueueStuActivity來(lái)解綁占坑Activity和映射的真實(shí)Activity的關(guān)系
5.設(shè)置占坑Activity和真實(shí)Activity的關(guān)系
關(guān)系的設(shè)定是在ActivityThreadHandlerCallback里面標(biāo)志Activity是否在用
mStubQueue是用來(lái)記錄占坑Activity和真實(shí)Activity的關(guān)系。
Small InstumentationWrapper作用用來(lái)替換占坑和真實(shí)Activity的轉(zhuǎn)換耘成,還有Activity的生命周期的提供調(diào)整。
這節(jié)到到這里件豌,
下一節(jié)將會(huì)介紹真正實(shí)現(xiàn)Small的核心代碼ReflectAccelerator疮方。
敬請(qǐng)期待?厥取!骡显!