Android 各個版本WebView,android版本webview

來源:互聯網
上載者:User

Android 各個版本WebView,android版本webview
轉載請註明出處   http://blog.csdn.net/typename/ powered by miechal zhao : miechalzhao@gmail.com前言:

根據Google公布的Android 各個系統版本市場佔有率(Google Android dashboards), Android 4.0及其以上系統將近90%左右,發展趨勢必將是未來市面上幾乎是Android 4.0以上系統。本文主要關注Android 4.0及以上系統WebView的實現,從Android WebView實現的Framework層大致可以分為三段Android 4.0系列,Android 4.1---4.3系列,Android 4.4及其以上系列。

WebView差異

     WebView是Android系統提供能顯示網頁的系統控制項,它是一個特殊的View,同時它也是一個ViewGroup可以有很多其他子View。在Android 4.4以下(不包含4.4)系統WebView底層實現是採用WebKit(http://www.webkit.org/)核心,而在Android 4.4及其以上Google 採用了chromium(http://www.chromium.org/)作為系統WebView的底層核心支援。在這一變化中Android 提供的WebView相關API並沒有發生大變化,在4.4上也相容低版本的API並且引進了少部分API。這裡簡單介紹下基於Chromium 的Webview和基於Webkit webview的差異,基於Chromium Webview提供更廣的HTML5,CSS3,Javascript支援,在目前最新Android 系統版本5.0上基於chromium 37,Webview提供絕大多數的HTML5特性支援。Webkit JavaScript引起採用WebCore Javascript 在Android 4.4上換成了V8能直接提升JavaScript效能。另外Chromium 支援遠端偵錯(Chrome DevTools)。

                             WebKit for WebView VS Chromium for WebView效能比對(測試環境 小米2. CM Browser. Android 4.1.1 VS 4.4.3)

  Webkit for Webview Chromium for Webview 備忘
HTML5 278 434 http://html5test.com/
遠端偵錯 不支援 支援 Android 4.4及以上支援
記憶體佔用 相差20-30M左右
WebAudio 不支援 支援 Android 5.0及以上支援
WebGL 不支援 支援 Android 5.0及以上支援
WebRTC 不支援 支援 Android 5.0及以上支援

Android 4.0 WebView結構
Android WebView API層主要提供給我們應用程式的介面,為了相容向下版本Android在高版本中也是對這一層的API進行支援,因此如果底層發生變化,這些API介面層也不會發生太大變化。Android 平台不僅提供應用程式層編程介面也提供native層編程。下面介紹中的三個部分:1)Android Framework:Android WebView是個特殊控制項實現的支援需要Framework的代碼主要在./frameworks/base/core/java/android/webkit目錄下,在Android 4.0實現主要是在WebViewCore.java,BrowserFrame.java等檔案。2) Android JNI:需要有Native代碼支援,因此需要有JNI層實現,Android WebView 4.0的JNI層實現WebView相關代碼在./external/webkit/Source/WebKit/android/jni/目錄下,這一層起到承上啟下的作用,連結Framework層以及WebKit層的橋樑,比如相關的一些實現在WebviewCore.cpp,WebCoreFrameBridge.cpp等。3) WebKit: WebKit核心,其核心主要是解析W3C標準以及渲染排版網頁,他是一個跨平台的核心引擎,那麼需要支援各個平台,需要我們的平台實現層,在Android 4.0系統這一部分相關代碼主要在./external/webkit/Source/WebKit/android/WebCoreSupport/目錄下,比如FrameLoaderClientAndroid.cpp,ChromeClientAndroid.cpp,這一層負責WebCore與系統平台的橋接,具體在不同平台會有不同的實現。實現網頁的解析排版及渲染由WebCore來實現在Android 4.0源碼當中代碼位於./external/webkit/Source/WebCore/下,下面有WebCore實現的各個模組功能支援的相關代碼,比如整頁模式部分在page目錄的chrome.cpp,比如載入頁面需要的資源的loader中得FrameLoader.cpp等,這裡不在繼續深入詳解,有興趣的朋友可以下載Android 4.0源碼閱讀。
Android 4.1--4.3 WebView結構

Android 4.1--4.3版本WebView核心實現還是基於WebKit,但在WebView的Framework層發生了變化,引入了原廠模式,目地是為了將核心與上層API介面分離開來,分離的意義不僅僅是抽象介面,更重要的是將來能替換核心部分的實現。 在4.1--4.3這一系列版本native結構基本與4.0版本相同,呈現新的變化:


Android 4.0--4.3 渲染

儘管之前4.0,與4.1--4.3是在不同的結構系列,其兩者之間的差異主要是集中的Framework上的變化,這種變化更多體現在Framework層結構上的變化,WebKit核心極其在Android上的表現機制並沒有發生很大變化,他們的渲染機制是相同的。下面介紹Android 4.0--4.3的渲染機制:


在Android 4.0上已經預設開啟硬體加速,因此WebView的渲染預設是基於硬體渲染的,通過本人分析其在WebView被隱藏的那一幀是採用軟體渲染,目的是減少硬體佔用,讓其他UI能及時的響應。在硬體渲染情況下WebView通過onDraw方法傳遞Canvas 並將其轉行為HardwareCanvas ,並產生native的 DrawGLFunction指標,通知native做渲染。在軟體模式下,WebView通過傳遞的Canvas 通知核心webkitDraw將核心的一幀產生picture傳輸到Canvas中,執行Canvas draw bitmap。

Android 4.4 WebView結構在Android 4.4系統上 Google已經將系統預設的Webkit核心替換成自己的開源項目chromium,通過之前的版本分析,我們可以看到Android 對WebView的Framework 結構進行調整使其更抽象,更重要的目的還是整合自己的開源chromium。下面我們來看看WebView的結構發生了什麼樣的變化:

目錄:./frameworks/base/core/java/android/webkit
./frameworks/webview/chromium/java/com/android/webview/chromium
./external/chromium_org/android_webview
./external/chromium_org/content為了將chromium項目整合到Android 中,chromium項目抽象出Android webview這一層,之前的介面抽離這時候已經變得很明顯,Android Webview基於chromium content API這一層,第三方瀏覽器廠商也可以採用這種方式,目前所瞭解的廠商有Opera使用這種方式。Android 4.4WebView的渲染核心目前也沒有發生太大變化,還是基於WebView的Canvas,將Chromium composit 結構繪製到WebView Canvas上。接入chromium核心,WebView瀏覽效能大幅度提升,但是和chrome for Android還是有些不同,主要體現在一下幾點:1. chrome瀏覽器是多進程架構,Chromium for Android Webview 是單進程架構。2. chrome瀏覽器 記憶體佔用比 Android WebView大的多。3. chrome支援更多的HTML5 feature。Android WebView展望:

Chromium項目編譯"android_webview_apk“ 目前實現是基於Android SurfaceView,其渲染效能高於Android WebView的Canvas,曆史遺留問題以及Android 系統WebView的作用特點,這一塊隨著Chromium 和 Android項目的整合,相信值得大家期待將來的Android WebView 的渲染效能會再次大幅提升。

本部落格會持續更新Android WebView後續版本的變化,敬請關注 謝謝!

參考資料:

https://source.android.com/ Android 4.0---4.4

http://developer.android.com/reference/android/webkit/WebView.html



怎看 android 系統版本 比如:系統版本 android版本 基帶版本~~之類

你的問題有點不明白阿。
所謂版本,就是一個東西,做了功能的添加修改刪除等之後,為了和之前東西區別,就做了號碼的標記,就是版本號碼。
一個系統開發,是有不同層的。有核心阿,應用程式層阿,畫面等等。不同的地區,開發是相對獨立的。因為不同的版本,功能可能不一樣,多一對於開發人員,版本號碼很重要。
給你舉一個例子。開發android軟體的時候,要用android的SDK,SDK的版本號碼就是你說的android版本。
webview的一個方法loadUrl,在2.1之前只有一個參數loadUrl(String),而在2.2之後就變成了loadUrl(String, Map<String, String>)。如果我用的是後面的方法做的軟體,而你的手機是2.1,那麼你就不能用我開發的東西。大概就是這個意思了。所以下載軟體的時候,看一下要求的最低版本,主意一下就行了。你說的那寫版本,沒什麼特殊意義。
 
Android : 怎在WebView顯示的頁面中尋找內容

它主要被設計用來顯示html檔案。正因為如此,所以在應用的開發過程中我們可以通過將需要顯示的內容整理成html格式的String從而輕鬆實現各種排版的效果。
雖然WebView組件封裝了許多功能為應用的開發提供了便利,但是由於其開放的方法有限,有時候這種便利往往會給開發人員造成很大的約束,例如開發人員不能方便的控制WebView的顯示起始行,不能得到相關的行資訊等。所以說WebView方便福士的時候也難免會存在許多不足之處。
寡人在開發應用的過程中就遇到了一個難題:將html中指定的內容顯示到當前螢幕中。怎麼解決這個問題呢?寡人一遍遍地研究WebView開放的方法,始終沒有得到很好的方案。白道不行,咱就來黑道,正史不行,咱就搜集野史,所謂條條大路通羅馬嘛!於是寡人就到處搜尋WebView的原始碼,希望通過非常規的辦法(調用WebView類庫中未開放的方法)有所起色。但是非常困難。並且顯而易見,即使找到了,也是不安全的調用。這就像上海的樓倒倒,說不定什麼時候就坍為平地。此路不但坎坷,前途未蔔,而且有可能是斷頭路。
蒼天啊!寡人雖然貴為天子但是有時候也很無奈,怎麼辦?寡人再次無奈地又審視了一下WebView開放的那幾個可憐的方法。最後想了想,它們中最有希望救駕的只有findAll和findNext了。於是寡人想,如果能保證需要定位的內容的唯一性,通過搜尋需要定位的內容,不就把該內容顯示到當前螢幕了嗎?於是寡人大喜,打算著手一試,成功後舉國歡慶。
但是,寡人一看協助文檔,這兩個方法的說明為空白,於是心中隱隱約約有一絲不安。果不其然,程式中一試,沒有任何效果。寡人只好去諮詢中西兩位輔政大臣百度和Google了。終於有了答案。下面就下詔天下,各位愛卿聽仔細了:
先看輔政大臣給朕的說法:
Find is not a fully supported feature in webview.
However, try calling view.setFindIsUp(true) to get the match to draw; This function is hidden and subject to change, so your app may break in a future release.WebView對搜尋尋找功能不能充分地支援。然而,我們可以嘗試著調用
setFindIsUp
方法來得到查詢的結果,並且把它顯示在當前螢幕(畫出來)。這個方法被隱藏並且容易發生變化,所以你的應用或許在未來的版本中不能正常地使用它。
由此可見,要想findAll和findNext起作用,必須調用
setFindIsUp
方法,但是此方法是內建函式,因此安全性不能保證,或許在未來某個版本就被和諧了。
儘管如此,這也是目前唯一較穩妥的一種解決方案。以後版本如果不能正常使用,說不定WebView會有更好的支援方法呢!Example :假設WebView已經裝載了html內容,下面是搜尋部分的程式:
WebView webView = (WebView)findViewById(R.id.webView) ;
webView.findAll(a) ;try{Method m = WebView.class.getMethod(setFindIsUp, Boolean.TYPE) ;
m.invoke(webView, true) ;
}catch(Throwable ignored){}findNext的使用同理,這裡不再累述。總結:lWebView的findAll & find......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.