標籤:開發 概覽 底層實現 非同步 targe 部分 對象 預設 ext
轉載請註明出處 http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao
概覽Android WebView提供展示網頁,也提供我們應用程式對網頁載入的一些定製,比方我們為了降低網路資料能夠設定當前載入的頁面不能顯示圖片,假設是pc網址在pad上訪問我們能夠提供使用者一種概覽模式的瀏覽方式,能夠提供放大網頁字型等定製功能。
Android 提供管理WebView的一些setting的類WebSettings。在WebView對象被建立時WebSettings對象也會被同一時候建立,並附有預設的settings值. WebSettings對象能夠通過WebView.getSettings()獲得。
WebSettings的生命週期同WebView生命週期同樣,假設WebView被destroy 則WebSettings應該被釋放,否則假設使用WebSettings繼續再操作的話, 會拋出異常IllegalStateException。
1.WebSettings API具體解釋調用WebSettings設定的全部函數是非同步制定的。因此我們設定某個狀態並不能立即生效。
public synchronized void setLoadsImagesAutomatically(boolean flag)
設定當前webview是否須要載入圖片,這個標記控制整個webview的狀態,而且對全部的資源都採取這樣的策略。假設設定為false 那麼訪問的當前網址中的所以圖片資源將不會被載入。預設值是true。
public synchronized void setBlockNetworkImage (boolean flag)
當getLoadsImagesAutomatically返回true這種方法才有效, 預設值為:false;
public void setCacheMode(int mode)
一個普通網頁的載入cache會被檢查,內容也會被又一次校正。第一次訪問網頁時,會儲存cache到本地,設定策略能夠讓網頁載入方式發生變化。cache模式有例如以下幾種:
LOAD_DEFAULT: 假設我們應用程式沒有設定不論什麼cachemode。 這個是預設的cache方式。 載入一張網頁會檢查是否有cache。假設有而且沒有到期則使用本地cache,否則 從網路上擷取。
LOAD_CACHE_ELSE_NETWORK: 使用cache資源。即使到期了也使用,假設沒有cache才從網路上擷取。
LOAD_NO_CACHE: 不使用cache 全部從網路上擷取
LOAD_CACHE_ONLY: 僅僅使用cache上的內容。
public void setLoadWithOverviewMode(boolean overview)
概覽模式的設定,預設指是false。
public synchronized void setJavaScriptEnabled (boolean flag)
預設值是false. 假設我們網頁須要javascript時。須要開啟這個設定。否則網頁載入不全。
2.WebSettings Webkit中的實現 WebSeetings 的API在Android 系統各個版本號碼變化不大僅僅是添加API或者deprecate一些API,但其內部是實如今不同版本號碼中確有些差異。眼下主流android系統版本號碼主要為Android 4.0以上。分析4.0以上各系統版本號碼得出webseetings的實現分為三塊Android 4.0, Android 4.1---4.3,Android 4.4。以下分析下Android 以上各版本號碼間的實現:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHlwZW5hbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
1)Android 4.0系統 主要分為兩部分,一部分是API層,另一部分Settings的儲存位置。
Settings儲存位置大部分的setting終於設定到WebCore其中的Settings.cpp, 比方javaScriptEnable等 另一部分依據模組相關儲存在模組內部,比方CacheMode儲存在FrameLoader其中。
2)Android 4.1--4.3系統對WebView的 framework進行重構,WebSettings對應也跟著變化。 中間引入了橋階層WebSettingsClassc。 Settings儲存位置大部分的setting終於設定到WebCore其中的Settings.cpp, 比方javaScriptEnable等 另一部分跟平台相關的儲存在WebCoreSupport層對應模組中。比方在4.1---4.3上CacheMode儲存在WebRequestContext
在Android 4.4上WebView底層實現換成了chromium,為了相容老的WebSettings的介面,Android 4.4做了chromium 的橋階層,主要涉及的WebSettings相關代碼在ContentSettingsAdapter,AwSettings中。和前面的一些版本號碼同樣的是大部分settings還是儲存在Webkit的Settings.cpp中。這邊簡介下chromium 使用的blink渲染引擎。而blink是從webkit其中剝離出來的,還保留了webkit的parsing等。因此和我們之前看到的Settings.cpp儲存在WebCore檔案夾,檔案夾結構會有所不同。另一部分settings在Android 4.4上儲存方式也是儲存在platform porting層。
以下是一個關於cachemode這個設定的分析:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHlwZW5hbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
參考資料:http://developer.android.com/reference/packages.html#q=websettingshttps://source.android.com/ Android 4.0---4.4
Android WebView 開發具體解釋(三)