深入Android Browser配置管理的詳解
更新時(shí)間:2013年05月22日 08:56:01 作者:
本篇文章是對(duì)Android Browser的配置管理進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
Settings是WebView提供給上層App的一個(gè)配置Webview的接口,每個(gè)WebView都有一個(gè)WebSettings,要控制WebView的行為,只能通過WebView.getSettings()獲取WebSettings對(duì)象的引用,然后再改變它的屬性。
Browser有一個(gè)BrowserSettings用來管理所有的配置信息,它是一個(gè)單鍵(Singleton)。BrowserSettings是直接管理WebSettings的,而UI部分則是由BrowserPreferencePage和Fragment來完成。BrowserSettings實(shí)現(xiàn)了OnSharedPreferenceChangedListener,當(dāng)某個(gè)配置項(xiàng)發(fā)生變化時(shí),BrowserSettings的接口onPreferencesChanged就會(huì)被回調(diào)到,然后BrowserSettings就會(huì)把配置通過WebSettings應(yīng)用到WebView中,所以這些Settings都是及時(shí)生效的。
一共有三類Settings:共享Settings,靜態(tài)Settings和動(dòng)態(tài)Settings。靜態(tài)就是不會(huì)在Browser運(yùn)行時(shí)發(fā)生變化的,也就是說在Browser的Settings中無法改變的一些配置,這些跟應(yīng)用程序內(nèi)部關(guān)聯(lián)較多,比如應(yīng)用程序的數(shù)據(jù)存放地點(diǎn)等,而與用戶層關(guān)系不多;共享Settings是獨(dú)立于WebView的,也就是說它被系統(tǒng)內(nèi)所有WebView共享的一些配置,比如Cookie,它不需要為每個(gè)WebView單獨(dú)配置。動(dòng)態(tài)Settings就是用于動(dòng)態(tài)配置WebView的,比如字體,縮放,是否加載圖片,是否啟用JavaScript等等。
初始化
因?yàn)锽rowser可以有多個(gè)窗口,每一個(gè)窗口都會(huì)有一個(gè)WebView,也就是說Browser會(huì)管理多個(gè)WebView,所以BrowserSettings也要管理多個(gè)WebSettings,因?yàn)槊恳粋€(gè)配置的改變都要應(yīng)用到所有的WebView中。為了能讓BrowserSettings能夠管理多個(gè)WebSettings,它必須持有對(duì)這些WebSettings的引用。Browser在創(chuàng)建WebView的時(shí)候會(huì)把WebView的配置WebSettings通過接口放到BrowserSettings中,BrowserSettings中有一個(gè)列表,用于持有對(duì)WebSettings的引用。具體的BrowserWebViewFactory中的initWebViewSettings()方法會(huì)在每次創(chuàng)建WebView后調(diào)用,它把WebView的WebSettings取出,做些必要的初始化,然后放到BrowserSettings中,BrowserSettings.startManagingSettings()會(huì)加載SharedPreference文件中的信息對(duì)此WebSettings進(jìn)行初始化,然后放到mManagedSettings列表中。
配置變更
用戶進(jìn)入Settings界面,進(jìn)行配置的更改,每當(dāng)有配置發(fā)生變化BrowserSettings.onSharedPreferencesChanged()會(huì)被回調(diào)到,它就會(huì)做syncManagedSettings()的動(dòng)作,把共享設(shè)置同步到底層去(也即把設(shè)置同步到Cookiemanager中),再遍歷列表mManagedSettings,把mPref中的信息全部同步到每個(gè)WebSettings中,這樣所有的WebView都會(huì)實(shí)時(shí)的響應(yīng)配置變更。
設(shè)置的界面和BrowserSettings沒有直接的關(guān)聯(lián),界面是通過PreferenceActivity和Fragment把各種Settings呈現(xiàn)給用戶,而BrowserSettings是把配置信息同步給WebView也就是讓配置生效。它們之間的信息橋梁是SharedPreference,也就是說PreferenceActivity和Fragment從用戶處接收配置信息,然后放到SharedPreference中,BrowserSettings監(jiān)聽SharedPreference的變化,再把SharedPreference同步給WebView。
Browser有一個(gè)BrowserSettings用來管理所有的配置信息,它是一個(gè)單鍵(Singleton)。BrowserSettings是直接管理WebSettings的,而UI部分則是由BrowserPreferencePage和Fragment來完成。BrowserSettings實(shí)現(xiàn)了OnSharedPreferenceChangedListener,當(dāng)某個(gè)配置項(xiàng)發(fā)生變化時(shí),BrowserSettings的接口onPreferencesChanged就會(huì)被回調(diào)到,然后BrowserSettings就會(huì)把配置通過WebSettings應(yīng)用到WebView中,所以這些Settings都是及時(shí)生效的。
一共有三類Settings:共享Settings,靜態(tài)Settings和動(dòng)態(tài)Settings。靜態(tài)就是不會(huì)在Browser運(yùn)行時(shí)發(fā)生變化的,也就是說在Browser的Settings中無法改變的一些配置,這些跟應(yīng)用程序內(nèi)部關(guān)聯(lián)較多,比如應(yīng)用程序的數(shù)據(jù)存放地點(diǎn)等,而與用戶層關(guān)系不多;共享Settings是獨(dú)立于WebView的,也就是說它被系統(tǒng)內(nèi)所有WebView共享的一些配置,比如Cookie,它不需要為每個(gè)WebView單獨(dú)配置。動(dòng)態(tài)Settings就是用于動(dòng)態(tài)配置WebView的,比如字體,縮放,是否加載圖片,是否啟用JavaScript等等。
初始化
因?yàn)锽rowser可以有多個(gè)窗口,每一個(gè)窗口都會(huì)有一個(gè)WebView,也就是說Browser會(huì)管理多個(gè)WebView,所以BrowserSettings也要管理多個(gè)WebSettings,因?yàn)槊恳粋€(gè)配置的改變都要應(yīng)用到所有的WebView中。為了能讓BrowserSettings能夠管理多個(gè)WebSettings,它必須持有對(duì)這些WebSettings的引用。Browser在創(chuàng)建WebView的時(shí)候會(huì)把WebView的配置WebSettings通過接口放到BrowserSettings中,BrowserSettings中有一個(gè)列表,用于持有對(duì)WebSettings的引用。具體的BrowserWebViewFactory中的initWebViewSettings()方法會(huì)在每次創(chuàng)建WebView后調(diào)用,它把WebView的WebSettings取出,做些必要的初始化,然后放到BrowserSettings中,BrowserSettings.startManagingSettings()會(huì)加載SharedPreference文件中的信息對(duì)此WebSettings進(jìn)行初始化,然后放到mManagedSettings列表中。
配置變更
用戶進(jìn)入Settings界面,進(jìn)行配置的更改,每當(dāng)有配置發(fā)生變化BrowserSettings.onSharedPreferencesChanged()會(huì)被回調(diào)到,它就會(huì)做syncManagedSettings()的動(dòng)作,把共享設(shè)置同步到底層去(也即把設(shè)置同步到Cookiemanager中),再遍歷列表mManagedSettings,把mPref中的信息全部同步到每個(gè)WebSettings中,這樣所有的WebView都會(huì)實(shí)時(shí)的響應(yīng)配置變更。
設(shè)置的界面和BrowserSettings沒有直接的關(guān)聯(lián),界面是通過PreferenceActivity和Fragment把各種Settings呈現(xiàn)給用戶,而BrowserSettings是把配置信息同步給WebView也就是讓配置生效。它們之間的信息橋梁是SharedPreference,也就是說PreferenceActivity和Fragment從用戶處接收配置信息,然后放到SharedPreference中,BrowserSettings監(jiān)聽SharedPreference的變化,再把SharedPreference同步給WebView。
相關(guān)文章
android教程之intent的action屬性使用示例(intent發(fā)短信)
這篇文章主要介紹了android中intent的action屬性使用示例,提供了使用intent撥打電話、發(fā)送短信、播放mp3的代碼2014-01-01
Android實(shí)現(xiàn)縮放動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)縮放動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
Android?Service完整實(shí)現(xiàn)流程分析
Android的服務(wù)是開發(fā)Android應(yīng)用程序的重要組成部分。不同于活動(dòng)Activity,服務(wù)是在后臺(tái)運(yùn)行,服務(wù)沒有接口,生命周期也與活動(dòng)Activity非常不同。通過使用服務(wù)我們可以實(shí)現(xiàn)一些后臺(tái)操作,比如想從遠(yuǎn)程服務(wù)器加載一個(gè)網(wǎng)頁等,下面來看看詳細(xì)內(nèi)容,需要的朋友可以參考下2023-01-01
Android學(xué)習(xí)教程之高仿安卓微信6.0(2)
這篇文章主要為大家詳細(xì)介紹了Android學(xué)習(xí)教程之高仿安卓微信6.0的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android實(shí)現(xiàn)自定義手勢和識(shí)別手勢的功能
這篇文章主要介紹了Android實(shí)現(xiàn)自定義手勢和識(shí)別手勢的功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
android實(shí)現(xiàn)圓形漸變進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)圓形漸變進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
Android RecyclerView添加FootView和HeadView
這篇文章主要介紹了Android RecyclerView添加FootView和HeadView的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10

