深入Android Browser配置管理的詳解
更新時間:2013年05月22日 08:56:01 作者:
本篇文章是對Android Browser的配置管理進行了詳細的分析介紹,需要的朋友參考下
Settings是WebView提供給上層App的一個配置Webview的接口,每個WebView都有一個WebSettings,要控制WebView的行為,只能通過WebView.getSettings()獲取WebSettings對象的引用,然后再改變它的屬性。
Browser有一個BrowserSettings用來管理所有的配置信息,它是一個單鍵(Singleton)。BrowserSettings是直接管理WebSettings的,而UI部分則是由BrowserPreferencePage和Fragment來完成。BrowserSettings實現(xiàn)了OnSharedPreferenceChangedListener,當某個配置項發(fā)生變化時,BrowserSettings的接口onPreferencesChanged就會被回調到,然后BrowserSettings就會把配置通過WebSettings應用到WebView中,所以這些Settings都是及時生效的。
一共有三類Settings:共享Settings,靜態(tài)Settings和動態(tài)Settings。靜態(tài)就是不會在Browser運行時發(fā)生變化的,也就是說在Browser的Settings中無法改變的一些配置,這些跟應用程序內部關聯(lián)較多,比如應用程序的數據存放地點等,而與用戶層關系不多;共享Settings是獨立于WebView的,也就是說它被系統(tǒng)內所有WebView共享的一些配置,比如Cookie,它不需要為每個WebView單獨配置。動態(tài)Settings就是用于動態(tài)配置WebView的,比如字體,縮放,是否加載圖片,是否啟用JavaScript等等。
初始化
因為Browser可以有多個窗口,每一個窗口都會有一個WebView,也就是說Browser會管理多個WebView,所以BrowserSettings也要管理多個WebSettings,因為每一個配置的改變都要應用到所有的WebView中。為了能讓BrowserSettings能夠管理多個WebSettings,它必須持有對這些WebSettings的引用。Browser在創(chuàng)建WebView的時候會把WebView的配置WebSettings通過接口放到BrowserSettings中,BrowserSettings中有一個列表,用于持有對WebSettings的引用。具體的BrowserWebViewFactory中的initWebViewSettings()方法會在每次創(chuàng)建WebView后調用,它把WebView的WebSettings取出,做些必要的初始化,然后放到BrowserSettings中,BrowserSettings.startManagingSettings()會加載SharedPreference文件中的信息對此WebSettings進行初始化,然后放到mManagedSettings列表中。
配置變更
用戶進入Settings界面,進行配置的更改,每當有配置發(fā)生變化BrowserSettings.onSharedPreferencesChanged()會被回調到,它就會做syncManagedSettings()的動作,把共享設置同步到底層去(也即把設置同步到Cookiemanager中),再遍歷列表mManagedSettings,把mPref中的信息全部同步到每個WebSettings中,這樣所有的WebView都會實時的響應配置變更。
設置的界面和BrowserSettings沒有直接的關聯(lián),界面是通過PreferenceActivity和Fragment把各種Settings呈現(xiàn)給用戶,而BrowserSettings是把配置信息同步給WebView也就是讓配置生效。它們之間的信息橋梁是SharedPreference,也就是說PreferenceActivity和Fragment從用戶處接收配置信息,然后放到SharedPreference中,BrowserSettings監(jiān)聽SharedPreference的變化,再把SharedPreference同步給WebView。
Browser有一個BrowserSettings用來管理所有的配置信息,它是一個單鍵(Singleton)。BrowserSettings是直接管理WebSettings的,而UI部分則是由BrowserPreferencePage和Fragment來完成。BrowserSettings實現(xiàn)了OnSharedPreferenceChangedListener,當某個配置項發(fā)生變化時,BrowserSettings的接口onPreferencesChanged就會被回調到,然后BrowserSettings就會把配置通過WebSettings應用到WebView中,所以這些Settings都是及時生效的。
一共有三類Settings:共享Settings,靜態(tài)Settings和動態(tài)Settings。靜態(tài)就是不會在Browser運行時發(fā)生變化的,也就是說在Browser的Settings中無法改變的一些配置,這些跟應用程序內部關聯(lián)較多,比如應用程序的數據存放地點等,而與用戶層關系不多;共享Settings是獨立于WebView的,也就是說它被系統(tǒng)內所有WebView共享的一些配置,比如Cookie,它不需要為每個WebView單獨配置。動態(tài)Settings就是用于動態(tài)配置WebView的,比如字體,縮放,是否加載圖片,是否啟用JavaScript等等。
初始化
因為Browser可以有多個窗口,每一個窗口都會有一個WebView,也就是說Browser會管理多個WebView,所以BrowserSettings也要管理多個WebSettings,因為每一個配置的改變都要應用到所有的WebView中。為了能讓BrowserSettings能夠管理多個WebSettings,它必須持有對這些WebSettings的引用。Browser在創(chuàng)建WebView的時候會把WebView的配置WebSettings通過接口放到BrowserSettings中,BrowserSettings中有一個列表,用于持有對WebSettings的引用。具體的BrowserWebViewFactory中的initWebViewSettings()方法會在每次創(chuàng)建WebView后調用,它把WebView的WebSettings取出,做些必要的初始化,然后放到BrowserSettings中,BrowserSettings.startManagingSettings()會加載SharedPreference文件中的信息對此WebSettings進行初始化,然后放到mManagedSettings列表中。
配置變更
用戶進入Settings界面,進行配置的更改,每當有配置發(fā)生變化BrowserSettings.onSharedPreferencesChanged()會被回調到,它就會做syncManagedSettings()的動作,把共享設置同步到底層去(也即把設置同步到Cookiemanager中),再遍歷列表mManagedSettings,把mPref中的信息全部同步到每個WebSettings中,這樣所有的WebView都會實時的響應配置變更。
設置的界面和BrowserSettings沒有直接的關聯(lián),界面是通過PreferenceActivity和Fragment把各種Settings呈現(xiàn)給用戶,而BrowserSettings是把配置信息同步給WebView也就是讓配置生效。它們之間的信息橋梁是SharedPreference,也就是說PreferenceActivity和Fragment從用戶處接收配置信息,然后放到SharedPreference中,BrowserSettings監(jiān)聽SharedPreference的變化,再把SharedPreference同步給WebView。

Android在fragment中編寫toobar的步驟詳解
這篇文章主要介紹了Android在fragment中編寫toobar,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
2021-01-01 
Android開發(fā) -- 控件的顯示與隱藏 setVisibility View.VISIBLE View.INVISI
本文簡單介紹在Android開發(fā)中控件的顯示與隱藏幾種常見的屬性,給大家一個參考,希望對大家學習有所幫助。
2016-06-06 
完美解決EditText和ScrollView的滾動沖突(下)
這篇文章再次為大家詳細介紹了完美解決EditText和ScrollView滾動沖突的方法,感興趣的小伙伴們可以參考一下
2016-06-06 
Android開發(fā)實現(xiàn)撥打電話與發(fā)送信息的方法分析
這篇文章主要介紹了Android開發(fā)實現(xiàn)撥打電話與發(fā)送信息的方法,結合實例形式分析了Android撥打電話及發(fā)送信息相關布局、功能實現(xiàn)及權限控制操作技巧,需要的朋友可以參考下
2017-12-12