溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android 瀏覽器的研究(三)--- APK, Activity, Controller和Ui

發(fā)布時間:2020-07-18 13:41:54 來源:網(wǎng)絡(luò) 閱讀:1301 作者:孫洪波 欄目:移動開發(fā)

從瀏覽器Apk的AndroidManifest.xml文件看到,Apk的Application 類和主Activity類分別是 Browser和BrowserActivity。

Browser Application類在onCreate方法中進(jìn)行了以下工作:

1. 同步Cookie

2. 初始化設(shè)置

3. 初始化Preloader

BrowserActivity 是Apk的主Activity,我們在Launcher上點擊瀏覽器圖標(biāo)啟動的就是這個Activity。

查看BrowserActivity的代碼,可以看到它在onCreate方法中創(chuàng)建了Controller成員,然后后續(xù)的主要方法都Delegate給了Controller成員進(jìn)行處理,它自己基本上就是系統(tǒng)功能與Android Activity Life Cycle管理之間的一個Adapter。

 在Controller創(chuàng)建的同時創(chuàng)建了一個Ui對象,看到Apk目前可以支持Tablet(XLargeUi)和手機(jī)(PhoneUi)。

 從Controller和Ui大概可以判斷這是一個類似MVC的設(shè)計(沒有M,why?)。

 可以期望,系統(tǒng)的基本控制邏輯是在Controller類實現(xiàn),而Ui則負(fù)責(zé)Ui的部分。

 

 Controller類基本分析:

 Controller類實現(xiàn)了三個接口:ActivityController,WebViewController,UiController。

 ActivityController:我們已經(jīng)在BrowserActivity里看到,這個接口用于與Android Activity Life Cycle Management(LCM)進(jìn)行適配, BrowserActivity只使用該接口訪問Controller,它保持的引用就是一個ActivityController接口:ActivityController mController。 設(shè)計模式的基本原則:program to an interface, not an implementation。

 WebViewController:從該接口的方法看到,這個接口除了與WebView交互比較多,還與Tab類交互密切。根據(jù)經(jīng)驗,瀏覽器一般為每個網(wǎng)頁提供一個單獨的Tab,估計這個就是管理該Tab的類。接口的方法與WebViewClient里的方法很類似,可以期望給接口主要實現(xiàn)WebViewClient相關(guān)的Customization Point.搜索該接口的使用情況,看到主要是Tab類使用它。Tab類是與WebView進(jìn)行交互的主要類,看來需要重點研究。

 UiController:與Ui部分控制相關(guān)的接口,openTab,closeTab,setActiveTab,書簽,設(shè)置等等。正像期望的那樣,Ui類只保持Controller的這個接口:UiController mUiController;


 Ui類基本分析:Ui類層次結(jié)構(gòu)稍微豐富一點點,包括UI接口,BaseUi抽象類和兩個具體類PhoneUi&XLargeUi。Ui的方法主要是跟Tab,Menu等Ui對象相關(guān)的方法,這里不具體研究。同樣,Controller與Ui的交互也是通過接口:private UI mUi;

 對Apk結(jié)構(gòu)的分析暫時到此,后面我們從系統(tǒng)典型場景入手,分析系統(tǒng)典型功能的具體實現(xiàn)。






向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI