轉載請注明出處 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 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 WebView展望:
Chromium項目編譯"android_webview_apk“ 眼下實現是基於Android SurfaceView,其渲染性能高於Android WebView的Canvas,歷史遺留問題以及Android 系統WebView的作用特點,這一塊隨着Chromium 和 Android項目的整合,相信值得大家期待將來的Android WebView 的渲染性能會再次大幅提升。
本博客會持續更新Android WebView興許版本號的變化,敬請關注 謝謝!
Android 5.0 Lollipop WebView
參考資料:
https://source.android.com/ Android 4.0---5.0
http://developer.android.com/reference/android/webkit/WebView.html