欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

理解WebKit和Chromium: Android 4.4 上的Chromi

系統(tǒng) 2437 0

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

## 概述

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

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


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

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

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

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


## 同Chrome瀏覽器的比較

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

Chromium WebView

Chrome瀏覽器(Android版)

是否開源

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

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

HTML5功能

目前不支持WebGL,WebRTC,WebAudio等

支持絕大多數(shù)HTML5功能(HTML5test得分超過(guò)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方面是跟隨最新的代碼。

進(jìn)程模型

僅單進(jìn)程

支持多進(jìn)程和單進(jìn)程(不過(guò),目前單進(jìn)程工作還有些問(wèn)題)

渲染方式

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

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


## 渲染方式

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

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

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

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

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

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


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

待續(xù),稍后會(huì)補(bǔ)上。


## 參考資料

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號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 朋友不在家 | 久久经典国产视频 | 91香蕉国产视频 | 日韩精品手机在线 | 国产馆精品推荐在线观看 | 免费特黄一级欧美大片在线看 | 日韩一级一欧美一级国产 | 久久久久成人免费 | 中文字幕一区二区三区四区五区 | 亚洲欧美日韩精品久久奇米色影视 | 成年网站在线看 | 天天久| 成人久久18免费游戏网站 | 九色 在线 | 午夜视频在线免费观看 | 一本一道久久综合狠狠老 | 火辣福利在线观看 | 日韩a| 99久久99 | 亚洲色四在线视频观看 | 日本一二三区视频 | 日本久久久久久 | 91精品成人免费国产 | 青青草在线视频免费观看 | 日韩三级网 | 国产乱码精品一区二区三区中文 | 色婷婷激婷婷深爱五月小说 | 日本欧美久久久久免费播放网 | 激情 一区 | 欧美日韩精 | 国产无线乱码一区二三区 | 亚洲福利视频一区二区 | 日本黄大片视频在线播放 | 亚洲一区二区三区免费视频 | 亚洲成a人在线观看 | 久久91av| 香蕉国产人午夜视频在线观看 | 精品国产精品国产 | 一区二区三区视频在线 | 国产青青视频 | 午夜免费 |