Android webkit 时代结束,我们需要做些什么准备?
Android 4.4最新发布版本对浏览器来说是一个革命性变化,external下面的webkit源码已经被移除,前一阵子吵得沸沸扬扬的chromium作为android默认浏览器的猜测已经尘埃落定,这对于已经习惯于android webkit开发的人来说,需要去学习android chromium。根据本人观察这次大的变化需要以下几点。
(1).WebView接口没有任何变化,基于此的应用可以继续放心使用
(2).android chromium 在功能和性能较之google自己研发的Chrome浏览器(Android版)差距还是挺大。
(3).有些在androidwebkit 实现的功能在androidchromium 基本需要重来一遍,对于已经习惯android webkit开发的人员,需要快速去了解新的内核原理和实现方式。(焦点实现逻辑,绘制方式等等)
针对这3点重点做下介绍,实际在androidchromium出世之前,google已经在调整WebView的内部实现了,已经加上了WebViewProvider(WebView继承WebViewProvider),已经为换核做好准备了.为了保持WebView上层接口的一致性,google对于android chromium还是动了很大手术。我们知道chromium本身的框架是基于多进程模型,渲染进程采用沙箱模型。大家可能看到在external目录下存在一个chromium文件,但是这个不是真正的chromium源码,这只是chromium其中的一个网络模块。这个模块google做得已经很独立,这个模块也是体现chromium速度快的新特性,目前已经好多使用开源软件的公司直接拿这个网络模块单独去使用。chromium_org是真正存放chromium源码的文件夹。目前android4.4采用chromium30版本,目前最新的chromium33 Release版本已经发布。
针对android chromium和Chrome浏览器(Android)在设计框架上还是存在较大差异。
(1).android chromium 采用单进程模型,能够省内存,当时在稳定性上就要略差一些,同时没有了沙盒模型安全系数会略低一些。
Chrome浏览器(Android) 采用多进程模型,在稳定性安全性都有一定优势,但是占用内存又会多一些。
(2).渲染方式 android chromium 要依赖于android UI架构,也就是我们常说的OnDraw模型,说到OnDraw,google采用硬件和软件2种方式。软件方式和androidwebkit使用方式接近,就是把所有的数据放到skpicture上面,然后在OnDraw的时候绘制,通知到surfaceflinger 完成最终混合操作。硬件方式:依赖于android本身UI系统,目前只能在android4.4平台上运行。具体如何运作,在后续的文章中会进行详尽介绍。
Chrome浏览器(Android) 只有硬件加速一种,但是这种硬件加速的模式和上面的有所不同,采用SurfaceView方式,道理很简单就是申请一块单独的内存,专门给GPU线程来使用(android版本的GPU存在Browser进程中以线程方式存在),这样做的目的,可以同主UI线程分离,使得页面动作处理更加顺滑。
(3) android chromium 在功能上目前不支持WebGL,WebRTC,WebAudio等,Chrome浏览器(Android版)支持绝大多数HTML5功能。
Android webkit 我们知道如果要对焦点定制,我们直接修改webkit封装层就可以,但是如果要修改android chromium中的焦点或者js扩展一些功能,就显得不是那么直接,其中有以下几点原因:
(1) 多进程的框架带来了,全局数据的共享以及控制都显得不方便。拿简单的settings的数据控制,都带来不方便性
(2) android chromium 内核改名为blink,虽然在基本的功能上和webkit有非常相近之处,但是在具体的逻辑上,改动已经非常大,特别是在Loader过程,而且以后会越走越远。也就是说在以后的开发过程中,只是掌握webkit的框架是远远不够的,需要跟上blink的节奏。
(3) 从绘制方式来看,android chromium的混合主要采用CC(chromium compositer) 模块,这和webkit直线式绘制模式有很大区别。
以上是研究了android chromium代码得出的一些结论,如有不当之处欢迎指正。
参考资料:
https://android.googlesource.com/platform/external/chromium_org/
QQ:390012381
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。