工作里程之二,手机app里面的网页--WebView

来源:互联网 发布:网络建设与管理方案 编辑:程序博客网 时间:2024/05/09 21:16
两年前从事的还是基于android底层的开发工作,那个时候要经常考虑android版本的问题,最大变化应该就是app应用里面的网页webview的变化。android4.4之前(不包括4.4)中的webview是基于webkit的,android4.4之后(包括4.4)中的webview是基于Chromium的,再说webview的变化之前,先来介绍一波android的历史版本:Android 1.0(unknown suagr)        (未知的甜点--博主自己杜撰的)Android 1.1 - Petit Four           (花式小蛋糕)Android 1.5 - Cupcake              (纸杯蛋糕)Android 1.6 - Donut                (油炸圈饼)Android 2.0/2.1 - Éclair           (糖霜衣,乳酪馅)Android 2.2 - Froyo                (酸奶制成的甜品)Android 2.3 - Gingerbread          (姜饼)Android 3.0/3.1/3.2 - Honeycomb    (蜂窝)Android 4.0 - Ice Cream Sandwich   (夹心冰琪淋)Android 4.1/4.2/4.3 - Jelly Bean   (果冻豆)Android 4.4 - KitKat               (奇巧)Android 5.0/5.1 - Lollipop(Android L)(棒棒糖)Android 6.0 - Marshmallow(Android M) (棉花软糖)Android 7.0 -Nougat(Android N)       (牛轧糖)正文:从Android WebView实现的Framework层大致可以分为三段Android 4.0系列,Android 4.1---4.3系列,Android 4.4及其以上系列。Android 4.0 WebView结构Android WebView API层主要提供给我们应用程序的接口,为了兼容向下版本Android在高版本中也是对这一层的API进行支持,因此如果底层发生变化,这些API接口层也不会发生太大变化。Android 平台不仅提供应用层编程接口也提供native层编程。下面介绍上图中的三个部分:![安卓4.0](http://img.blog.csdn.net/20170215164413654?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVhc29uZGF5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)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版本相同,下图呈现新的变化:![安卓4.1-4.3](http://img.blog.csdn.net/20170215164533192?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVhc29uZGF5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)Android 4.4 WebView结构在Android 4.4系统上 Google已经将系统默认的Webkit内核替换成自己的开源项目chromium,通过之前的版本分析,我们可以看到Android 对WebView的Framework 结构进行调整使其更抽象,更重要的目的还是集成自己的开源chromium。下面我们来看看WebView的结构发生了什么样的变化:![安卓4.4](http://img.blog.csdn.net/20170215164919631?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVhc29uZGF5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)目录:./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。
0 0
原创粉丝点击