深入Android Browser組態管理的詳解

來源:互聯網
上載者:User

Settings是WebView提供給上層App的一個配置Webview的介面,每個WebView都有一個WebSettings,要控制WebView的行為,只能通過WebView.getSettings()擷取WebSettings對象的引用,然後再改變它的屬性。
Browser有一個BrowserSettings用來管理所有的配置資訊,它是一個單鍵(Singleton)。BrowserSettings是直接管理WebSettings的,而UI部分則是由BrowserPreferencePage和Fragment來完成。BrowserSettings實現了OnSharedPreferenceChangedListener,當某個配置項發生變化時,BrowserSettings的介面onPreferencesChanged就會被回調到,然後BrowserSettings就會把配置通過WebSettings應用到WebView中,所以這些Settings都是及時生效的。

一共有三類Settings:共用Settings,靜態Settings和動態Settings。靜態就是不會在Browser運行時發生變化的,也就是說在Browser的Settings中無法改變的一些配置,這些跟應用程式內部關聯較多,比如應用程式的資料存放地點等,而與使用者層關係不多;共用Settings是獨立於WebView的,也就是說它被系統內所有WebView共用的一些配置,比如Cookie,它不需要為每個WebView單獨配置。動態Settings就是用於動態配置WebView的,比如字型,縮放,是否載入圖片,是否啟用JavaScript等等。

初始化
因為Browser可以有多個視窗,每一個視窗都會有一個WebView,也就是說Browser會管理多個WebView,所以BrowserSettings也要管理多個WebSettings,因為每一個配置的改變都要應用到所有的WebView中。為了能讓BrowserSettings能夠管理多個WebSettings,它必須持有對這些WebSettings的引用。Browser在建立WebView的時候會把WebView的配置WebSettings通過介面放到BrowserSettings中,BrowserSettings中有一個列表,用於持有對WebSettings的引用。具體的BrowserWebViewFactory中的initWebViewSettings()方法會在每次建立WebView後調用,它把WebView的WebSettings取出,做些必要的初始化,然後放到BrowserSettings中,BrowserSettings.startManagingSettings()會載入SharedPreference檔案中的資訊對此WebSettings進行初始化,然後放到mManagedSettings列表中。

配置變更
使用者進入Settings介面,進行配置的更改,每當有配置發生變化BrowserSettings.onSharedPreferencesChanged()會被回調到,它就會做syncManagedSettings()的動作,把共用設定同步到底層去(也即把設定同步到Cookiemanager中),再遍曆列表mManagedSettings,把mPref中的資訊全部同步到每個WebSettings中,這樣所有的WebView都會即時的響應配置變更。

設定的介面和BrowserSettings沒有直接的關聯,介面是通過PreferenceActivity和Fragment把各種Settings呈現給使用者,而BrowserSettings是把配置資訊同步給WebView也就是讓配置生效。它們之間的資訊橋樑是SharedPreference,也就是說PreferenceActivity和Fragment從使用者處接收配置資訊,然後放到SharedPreference中,BrowserSettings監聽SharedPreference的變化,再把SharedPreference同步給WebView。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.