亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

理解WebKit和Chromium: Android 4.4 上的Chromi

系統(tǒng) 2363 0

原文地址:http://blog.csdn.net/milado_nju/article/details/17098399

## 概述

相信讀者已經(jīng)注意到了,在最新的Android 4.4Kitkat版本中,原本基于Android WebKit的WebView實現(xiàn)被換成基于Chromium的WebView實現(xiàn)。在前面的章節(jié)中,筆者也介紹過基于Chromium的WebView實現(xiàn)即將成為Android系統(tǒng)上的缺省實現(xiàn)方式,筆者也一直期待這一重大轉(zhuǎn)變,現(xiàn)在它真的發(fā)生了。而之前基于WebView接口的應(yīng)用程序甚至可以直接工作在該實現(xiàn)上而不需要任何特別的改變。舉個例子來說,Android系統(tǒng)上的缺省瀏覽器(AOSP中的瀏覽器),可以不需要任何改變直接工作在新的實現(xiàn)上。

WebView是一種嵌入式的編程接口,能夠提供Java接口給開發(fā)者來使用該模塊來渲染網(wǎng)頁?,F(xiàn)在的WebView只是一個接口類,通過一些內(nèi)部設(shè)計的改變,其具體的實現(xiàn)可以在之前的Android WebKit和Chromium之間進行切換。新的Chromium實現(xiàn)專注于提供一致性的接口(為了兼容以前的應(yīng)用),而內(nèi)部的渲染引擎改為使用基于Blink/Content內(nèi)核的引擎,這實現(xiàn)不管是從功能上還是性能來講,都帶來巨大的提升。為了支持WebView的工作方式,Chromium還是做了不少的改變的,例如前面提到的進程模型,渲染方式等,下面一一對他們作介紹。


## 層次結(jié)構(gòu)

在Android 4.4中,基于Chromium項目的WebView千呼萬喚始出來。為了支持歷史遺留的接口,Chromium還是做了很大改變的,讓筆者結(jié)合下圖的層次結(jié)構(gòu)來解釋基本的過程。

理解WebKit和Chromium: Android 4.4 上的Chromium WebView

上圖主要有四個部分,其中跟WebView相關(guān)的主要是上面三個部分,首先是WebView接口部分,它提供對外編程接口,同時它的內(nèi)部實現(xiàn)可以基于橋接代碼,也就是第二個部分。橋接部分的代碼主要有兩個作用,其一是實現(xiàn)WebView接口對實現(xiàn)的調(diào)用,第二是調(diào)用下面一層的代碼,這里面有個重要的部分就是需要設(shè)置AwContents為了繪圖而需要設(shè)置的兩組函數(shù)數(shù)組,這個在渲染部分介紹。它的代碼可以在frameworks/webview/chromium部分找到。以上兩個部分都是AOSP部分代碼,而第三個部分是AwContents是在Chromium項目中的,主要是構(gòu)建被橋接代碼使用的接口,這一部分主要基于Content接口,里面有很多不同于Chrome瀏覽器的實現(xiàn)。Android的開源代碼為了編譯上的方面,直接將Chromium 版本30代碼包含到external/chromium_org目錄中,有興趣的讀者可以自行查看。


## 同Chrome瀏覽器的比較

同Chrome瀏覽器比較,Chromium WebView在很多部分非常不一樣,例如開源與否、HTML5功能、版本支持、進程模型、渲染方式等。下表分析了這二者的主要區(qū)別。

Chromium WebView

Chrome瀏覽器(Android版)

是否開源

全部開源,包括內(nèi)核,橋接層等

Java層部分的代碼,包括用戶界面的代碼是閉源的,也就是說開發(fā)者是沒有辦法基于Chrome瀏覽器定制新瀏覽器,只可以基于Content層

HTML5功能

目前不支持WebGL,WebRTC,WebAudio等

支持絕大多數(shù)HTML5功能(HTML5test得分超過450),包括WebGL,WebRTC,WebAudio等

版本

僅能工作在Android4.4上,而且依賴于系統(tǒng)內(nèi)部的函數(shù),只能同Android AOSP一起編譯,目前是Chromium 30的版本

能工作在>=Android 4.0,而且不需要依賴Android系統(tǒng)內(nèi)部的函數(shù)。Chromium方面是跟隨最新的代碼。

進程模型

僅單進程

支持多進程和單進程(不過,目前單進程工作還有些問題)

渲染方式

支持軟件渲染和硬件加速渲染方式

目前只是硬件加速渲染方式


## 渲染方式

至于WebView內(nèi)部所使用的Chromium實現(xiàn)是采用硬件加速渲染還是軟件渲染,這里還是比較復(fù)雜的。根據(jù)Android的View結(jié)構(gòu),WebView的內(nèi)容需要通過一個onDraw(Canvas c)來完成繪制。為了將Chromium渲染網(wǎng)頁的結(jié)果繪制到該Canvas中,需要兩組繪圖函數(shù)組,第一組用來軟件渲染,第二組用來硬件加速渲染。而這兩組函數(shù)需要使用Android內(nèi)部函數(shù),這決定了目前WebView只能同Android AOSP代碼一起編譯,而不能像應(yīng)用程序一樣,只是依賴于Android SDK/NDK來編譯。下圖是當用戶界面或者網(wǎng)頁需要繪制的時候,繪圖的基本過程。

理解WebKit和Chromium: Android 4.4 上的Chromium WebView

這里Chromium的合成器具有兩種能力,就是包含支持軟件渲染的軟件渲染器和硬件加速渲染的渲染器。當用戶界面所對應(yīng)的畫布(canvas)是硬件加速的話,那么內(nèi)部采用硬件渲染機制。如果不是硬件加速的話,那么采用軟件渲染機制。當用戶的界面設(shè)置為硬件加速的時候(開發(fā)者可以在應(yīng)用程序的AndroidManifest.xml中設(shè)置屬性 android :hardwareAccelerated="true" ),那么用戶界面對應(yīng)的畫布即為硬件加速,否則即為軟件渲染方式。所以,具體Chromium WebView采用什么樣的方式,取決于調(diào)用WebView的應(yīng)用程序的設(shè)置方式。

值得提出的是,這里的硬件加速機制同Chrome瀏覽器的硬件加速機制是不一致的,因為Chrome瀏覽器為渲染網(wǎng)頁使用的控件是Android的SurfaceView,根據(jù)Android系統(tǒng)的說明,SurfaceView是可以在不同的線程來繪制的( One of the purposes of this class is to provide a surface in which a secondary thread can render into the screen) ,請讀者閱讀這里了解背后的原理http://developer.android.com/reference/android/view/SurfaceView.html。由此,Chrome瀏覽器是首先獲取SurfaceView的Surface對象的句柄(ID),然后由Chrome瀏覽器的GPU線程來繪制網(wǎng)頁。這樣,網(wǎng)頁的渲染工作同主線程完全隔離開來了,不會因為網(wǎng)頁的渲染而阻礙用戶界面的響應(yīng)。

而在Chromium WebView的實現(xiàn)中,因為WebView不是基于SurfaceView類的(因為歷史遺留問題),所以,繪制內(nèi)容到畫布上必須在主線程來操作,有鑒于此,這些渲染任務(wù)只能在主線程上工作,可能在某種程度上會阻礙用戶界面的響應(yīng),這是一個重大缺陷。根據(jù)筆者的數(shù)據(jù)來看,目前它的性能同Chrome瀏覽器/Content Shell也有一定的差距,考慮使用它的讀者可能需要權(quán)衡一下。

因為WebView采用單進程的渲染方式并省略了一些共享內(nèi)存和進程間通信的基礎(chǔ)設(shè)備,所以可以節(jié)省一些內(nèi)存使用空間,Chromium的官方也給出了一些數(shù)據(jù),例如打開一個空白頁,WebView目前只是需要33MB內(nèi)存,而Chrome瀏覽器需要大概49MB,而單進程模式的Chrome瀏覽器需要大概45MB內(nèi)存,還有更多詳細的數(shù)據(jù),有興趣的讀者可以進行參考和一些分析。


## 基于WebView的瀏覽器和基于Content接口的瀏覽器

待續(xù),稍后會補上。


## 參考資料

1. https://developers.google.com/chrome/mobile/docs/webview/overview

2. https://android.googlesource.com/platform/external/chromium_org/


by yongsheng@chromium.org


理解WebKit和Chromium: Android 4.4 上的Chromium WebView


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕一区二区区免 | 狠狠色丁香婷婷综合激情 | 婷婷综合久久 | 99热久久国产综合精品久久国产 | 亚洲综合色播 | 久热精品视频 | 91视频观看 | 久久99精品国产麻豆婷婷 | 99精品国产免费久久国语 | 亚洲精品色综合久久久 | 久久精品一区二区 | 夜夜摸夜夜操 | 亚洲高清免费视频 | 欧美精品一区二区三区视频 | 成人精品一区二区久久 | 黄色毛片小视频 | 国产亚洲综合在线 | 2018天天操天天干 | 亚洲国产成人资源在线桃色 | 午夜国产福利在线观看 | 99热精品久久只有精品黑人 | 天啪天天久久天天综合啪 | 亚洲欧美综合在线观看 | 女bbbbxxxx毛片视频丶 | 国产最新精品 | 色综合久久天天综线观看 | 四虎欧美在线观看免费 | 99热在线精品观看 | 国产丶欧美丶日韩丶不卡影视 | 亚洲欧美bt| 国产欧美日韩高清专区手机版 | 色狠狠狠狠综合影视 | 国产亚洲欧洲国产综合一区 | 青青热在线观看视频精品 | 日日夜夜操美女 | 天天爱添天天爱添天天爱添 | 成人免费网站视频www | 国产国语一级a毛片高清视频 | 综合色网站 | 国产日产欧产麻豆精品精品推荐 | 日本大臿亚洲香蕉大片 |