美文网首页
webview内核

webview内核

作者: 小鱼游儿 | 来源:发表于2019-01-02 14:19 被阅读56次
x5内核 原生webview
内核版本 统一Blink内核(基于chromium) 4.4以下WebKit,4.4以上chromium
sdk体积 不占用
js拦截 全部方式(待测试) 全部方式
浏览增强 支持office 、音视频
功能扩展 有(上传下载)
效能 极速,省流 低效
兼容 较好 无兼容问题
HTML5能力 webGL, canvas优化
内核共享 多app共用1内核 无此机制
弹窗广告

一、webView绘制相关


image.png

渲染方式
至于WebView内部所使用的Chromium实现是采用硬件加速渲染还是软件渲染,这里还是比较复杂的。根据Android的View结构,WebView的内容需要通过一个onDraw(Canvas c)来完成绘制。为了将Chromium渲染网页的结果绘制到该Canvas中,需要两组绘图函数组,第一组用来软件渲染,第二组用来硬件加速渲染。而这两组函数需要使用Android内部函数,这决定了目前WebView只能同Android AOSP代码一起编译,而不能像应用程序一样,只是依赖于Android SDK/NDK来编译。下图是当用户界面或者网页需要绘制的时候,绘图的基本过程。

image.png
这里Chromium的合成器具有两种能力,就是包含支持软件渲染的软件渲染器和硬件加速渲染的渲染器。当用户界面所对应的画布(canvas)是硬件加速的话,那么内部采用硬件渲染机制。如果不是硬件加速的话,那么采用软件渲染机制。当用户的界面设置为硬件加速的时候(开发者可以在应用程序的AndroidManifest.xml中设置属性android:hardwareAccelerated="true"),那么用户界面对应的画布即为硬件加速,否则即为软件渲染方式。所以,具体Chromium WebView采用什么样的方式,取决于调用WebView的应用程序的设置方式。
值得提出的是,这里的硬件加速机制同Chrome浏览器的硬件加速机制是不一致的,因为Chrome浏览器为渲染网页使用的控件是Android的SurfaceView,根据Android系统的说明,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线程来绘制网页。这样,网页的渲染工作同主线程完全隔离开来了,不会因为网页的渲染而阻碍用户界面的响应。

而在Chromium WebView的实现中,因为WebView不是基于SurfaceView类的(因为历史遗留问题),所以,绘制内容到画布上必须在主线程来操作,有鉴于此,这些渲染任务只能在主线程上工作,可能在某种程度上会阻碍用户界面的响应,这是一个重大缺陷。根据笔者的数据来看,目前它的性能同Chrome浏览器/Content Shell也有一定的差距,考虑使用它的读者可能需要权衡一下。

因为WebView采用单进程的渲染方式并省略了一些共享内存和进程间通信的基础设备,所以可以节省一些内存使用空间,Chromium的官方也给出了一些数据,例如打开一个空白页,WebView目前只是需要33MB内存,而Chrome浏览器需要大概49MB,而单进程模式的Chrome浏览器需要大概45MB内存,还有更多详细的数据,有兴趣的读者可以进行参考和一些分析。

https://www.cnblogs.com/xiaowangba/archive/2012/04/12/6313871.html

二、兼容性相关


image.png

相关文章

  • webview内核

    一、webView绘制相关 渲染方式至于WebView内部所使用的Chromium实现是采用硬件加速渲染还是软件渲...

  • WebView

    一、什么是WebView WebView是Android中UI组件的一种WebView基于webkit内核(Chr...

  • WebView

    WebView 内核 Chrome Android 4.4 KitKat 版本开始讲WebView的实现从WebK...

  • Android源码发开记录-更新Android源码中的webvi

    需求因为系统代码中内置的webview内核太旧,性能不满足现在需求。 1.下载对应需要的webview内核 htt...

  • WebView深究之Android是如何实现webview初始化

    webview初始化 关注Android加载webview内核的过程。我们从WebView的init过程中切入。W...

  • WebView 性能和用户体验优化

    回顾系统 WebView 进化史 从Android4.4系统开始,Chromium内核取代了Webkit内核。 从...

  • webview优化

    回顾系统 WebView 进化史 从Android4.4系统开始,Chromium内核取代了Webkit内核。 从...

  • andriod和IOS兼容性

    1、focus()调起键盘不同:IOS的原来的内核不能调起键盘,换成webkit webview内核,能调起键盘,...

  • WebView优化

    从Android4.4系统开始,Chromium内核取代了Webkit内核,正式地接管了WebView的渲染工作。...

  • WebView详细使用一(带进度的WebView)

    一、总体概述 带进度的WebView(一) 腾讯X5内核的集成(二) WebView初始化和Activity的封装...

网友评论

      本文标题:webview内核

      本文链接:https://www.haomeiwen.com/subject/yzdzlqtx.html