Hybrid-APP技术原理( 三 )


最终实现由SystemWebViewEngine类来对Android系统中WebView控件进行二次包装 , 这个类的初始化是在CordovaWebViewImpl类反射创建 , 相关插件和消息传递也是通过SystemWebViewEngine进行绑定 。
3.3、JS端cordova初始化
Android端调用loadUrl后会启动webview加载前端代码 , 首先会加载运行cordova.js中的代码 , 在cordova.js中会运行cordova/init模块对cordova进行一个初始化 , 初始化中主要的核心操作就是:检查监听核心事件是否触发、平台初始化工作、加载插件js 。

Hybrid-APP技术原理
文章图片
3.4、JS端平台启动处理
不同的平台中平台启动处理的模块会有一些差异 , 但是核心处理相差不大 , 在Android平台中主要进行了三个处理:初始化通信模块、处理物理按键的事件、在onCordovaReady事件被触发时通知原生端展示webview 。

Hybrid-APP技术原理
文章图片
3.5、JS端插件加载处理
插件js加载处理中主要先会通过load方法加载cordova_plugins.js , 获取到项目中用到的插件 , 然后通过inject方法加载插件js , 可以看到整个加载过程都是通过添加标签进行加载的 , 所以一旦插件数量很多对加载速度会有一定的影响 。
这里只是加载插件的js代码 , 原生端的插件加载并不是在这里进行的 。

Hybrid-APP技术原理
文章图片
3.6、Cordova启动流程
最后来总结一下整个cordova的启动流程 , 主要做了三个大的事情:
原生端启动webview加载前端代码 。 初始化插件 。 建立通信通道 。
Hybrid-APP技术原理
文章图片
3.7、Cordova通信流程
启动cordova后 , 在项目运行的过程中当前端需要调用native的能力时 , 就需要与native端进行通信 , Cordova通信流程中主要有这么几点:
Cordova通过在原生端与js端维护两个消息队列来处理消息回调 。 Cordova在执行完exec后 , android会马上从消息队列中取出数据同步返回 , 但不一定就是该次请求的数据 。 js端通过轮询获取原生端消息队列中的数据 。
Hybrid-APP技术原理
文章图片
四、总结
Hybrid的宗旨就是 , 如果WebView本身做不到 , 或者做起来有很大限制或者性能不佳 , 那么可以让原生配合 , 一起做到 。
因为Hybrid本是一个面向业务服务的东西 , 如果业务的野心足够大 , WebView容器的想象空间应该是在能力上与RN/小程序看齐的 , WebView在Hybrid的支持下 , 不单纯是使用Bridge调用几个原生API的事 。
我们完全可以拆解RN中的每个环节 , 把RN号称比WebView好的原生渲染/原生组件拆解融入WebView , 我也可以学习小程序保持WXML/WXSS的开发方式 , 而非RN那样统一用JSX开发 。
这种拆解不是将所有框架优点塞在一个大而全的框架中 , 各种优化方案的选择背后一定带来的是一些取舍 。 谁来决定取舍 , 业务决定 , 如果自己能深度把握这里面的设计思想 , 就不用在乎什么新的轮子新的框架 , 取其设计优点 , 融入自己的业务之中即可 。