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及其以上系列。html

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)。html5

                             WebKit for WebView VS Chromium for WebView性能比对(測试环境 小米2. CM Browser. Android 4.1.1 VS 4.4.3)java

  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


Android 4.0--4.3 渲染

虽然以前4.0,与4.1--4.3是在不一样的结构系列,其二者之间的差别主要是集中的Framework上的变化,这样的变化不少其它体现在Framework层结构上的变化,WebKit内核极其在Android上的表现机制并无发生很是大变化,他们的渲染机制是一样的。如下介绍Android 4.0--4.3的渲染机制:web


在Android 4.0上已经默认开启硬件加速,所以WebView的渲染默认是基于硬件渲染的,经过本人分析其在WebView被隐藏的那一帧是採用软件渲染,目的是下降硬件占用,让其它UI能及时的响应。在硬件渲染状况下WebView经过onDraw方法传递Canvas 并将其转行为HardwareCanvas ,并生成native的 DrawGLFunction指针,通知native作渲染。在软件模式下,WebView经过传递的Canvas 通知内核webkitDraw将内核的一帧生成picture传输到Canvas中,运行Canvas draw bitmap。chrome

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兴许版本号的变化,敬请关注 谢谢!浏览器


Android 5.0 Lollipop WebView

Lollipop版本号中WebView的内核实现採用Chromium 37版本号,这个版本号带来不少其它的安全性和稳定性。这个版本号解决Android 4.4版本号网页其中请求訪问打开本地文件选择器问题,引入新的回调接口,onShowFileChooser方法,需要此功能的可以在5.0上接上这个回调接口,并实现功能。另外这个版本号提供安全许可给用户选择,当网页需要訪问特殊资源时,会通知咱们的应用程序,请求赞成,回调接口为onPermissionRequest。以前咱们也提到这个版本号使得WebView默认支持WebAudio,WebGL,WebRTC等标准。
另外Google Android 还将webview作为一个能动态更新的app,能不更新Android版本号状况下,更新WebView内核。Android 5.0 Webview默认提供下降内存占用支持,并且智能选择需要绘制的HTML document部门来提供性能。 固然开发人员可以在本身应用程序需要时关闭这个选项(enableSlowWholeDocumentDraw)。

參考资料:安全

https://source.android.com/ Android 4.0---5.0
架构

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

相关文章
相关标签/搜索