目錄
前言
Launcher是一個(gè)用來(lái)顯示系統(tǒng)中已經(jīng)安裝的應(yīng)用程序的應(yīng)用程序又碌,Launcher 在啟動(dòng)過(guò)程中會(huì)請(qǐng)求PackageManagerService 返回系統(tǒng)中已經(jīng)安裝的應(yīng)用程序的信息磅网,并將這些信息封裝成一個(gè)快捷圖標(biāo)列表顯示在系統(tǒng)屏幕上蜗侈,這樣用戶可以通過(guò)點(diǎn)擊這些快捷圖標(biāo)來(lái)啟動(dòng)相應(yīng)的應(yīng)用程序睡雇,它的作用主要有兩點(diǎn)一個(gè)是啟動(dòng)應(yīng)用程序一個(gè)是顯示和管理應(yīng)用程序的快捷圖標(biāo)或者其他桌面組件喇肋。
分析Launcher的啟動(dòng)
啟動(dòng)入口在SystemServer.java的startOtherServices函數(shù)中凰棉,我們可以看到上面的注釋的意思也大概是這個(gè)
我們點(diǎn)擊到systemReady方法中讳侨,在第14282行發(fā)現(xiàn)有一個(gè)名為startHomeActivityLocked的方法被調(diào)用
我們點(diǎn)到startHomeActivityLocked方法中發(fā)現(xiàn)有一個(gè)getHomeIntent的調(diào)用
我們點(diǎn)進(jìn)getHomeIntent方法中,發(fā)現(xiàn)假如mFactoryTest不為FactoryTest.FACTORY_TEST_LOW_LEVEL(低級(jí)工廠模式)會(huì)添加一個(gè)Intent.CATEGORY_HOME的Category
然后我們?cè)贏ctivityManagerService.java的這一行加入Log打印
發(fā)現(xiàn)打印的包名是com.android.settings并不是launcher
然后我們?cè)趕ettings中的AndroidManifest.xml中發(fā)現(xiàn)了兩個(gè)帶有android.intent.category.HOME標(biāo)記的Activity
然后我們?cè)趦蓚€(gè)Activity中的onCreate方法中加入Log打印
我們編譯運(yùn)行后發(fā)現(xiàn)打印的是FallbackHome
image.png
我們打開FallbackHome.java溺蕉,發(fā)現(xiàn)代碼比較少伶丐,其中有一個(gè)方法是用來(lái)檢測(cè)是否找到了真正的HomeActivity,我這里加了一行Toast的代碼疯特,用來(lái)顯示真正的HomeActivity的包名
然后我們編譯源碼運(yùn)行模擬器哗魂,我們發(fā)現(xiàn)顯示的是launcher3(ps:由于這里我把默認(rèn)的launcher改成了launcher3所以這里顯示的是launcher3)