Hybrid-APP技术原理( 三 )
最终实现由SystemWebViewEngine类来对Android系统中WebView控件进行二次包装 , 这个类的初始化是在CordovaWebViewImpl类反射创建 , 相关插件和消息传递也是通过SystemWebViewEngine进行绑定 。
3.3、JS端cordova初始化
Android端调用loadUrl后会启动webview加载前端代码 , 首先会加载运行cordova.js中的代码 , 在cordova.js中会运行cordova/init模块对cordova进行一个初始化 , 初始化中主要的核心操作就是:检查监听核心事件是否触发、平台初始化工作、加载插件js 。 
文章图片
3.4、JS端平台启动处理
不同的平台中平台启动处理的模块会有一些差异 , 但是核心处理相差不大 , 在Android平台中主要进行了三个处理:初始化通信模块、处理物理按键的事件、在onCordovaReady事件被触发时通知原生端展示webview 。 
文章图片
3.5、JS端插件加载处理
插件js加载处理中主要先会通过load方法加载cordova_plugins.js , 获取到项目中用到的插件 , 然后通过inject方法加载插件js , 可以看到整个加载过程都是通过添加标签进行加载的 , 所以一旦插件数量很多对加载速度会有一定的影响 。
这里只是加载插件的js代码 , 原生端的插件加载并不是在这里进行的 。 
文章图片
3.6、Cordova启动流程
最后来总结一下整个cordova的启动流程 , 主要做了三个大的事情:
原生端启动webview加载前端代码 。 初始化插件 。 建立通信通道 。
文章图片
3.7、Cordova通信流程
启动cordova后 , 在项目运行的过程中当前端需要调用native的能力时 , 就需要与native端进行通信 , Cordova通信流程中主要有这么几点:
Cordova通过在原生端与js端维护两个消息队列来处理消息回调 。 Cordova在执行完exec后 , android会马上从消息队列中取出数据同步返回 , 但不一定就是该次请求的数据 。 js端通过轮询获取原生端消息队列中的数据 。
文章图片
四、总结
Hybrid的宗旨就是 , 如果WebView本身做不到 , 或者做起来有很大限制或者性能不佳 , 那么可以让原生配合 , 一起做到 。
因为Hybrid本是一个面向业务服务的东西 , 如果业务的野心足够大 , WebView容器的想象空间应该是在能力上与RN/小程序看齐的 , WebView在Hybrid的支持下 , 不单纯是使用Bridge调用几个原生API的事 。
我们完全可以拆解RN中的每个环节 , 把RN号称比WebView好的原生渲染/原生组件拆解融入WebView , 我也可以学习小程序保持WXML/WXSS的开发方式 , 而非RN那样统一用JSX开发 。
这种拆解不是将所有框架优点塞在一个大而全的框架中 , 各种优化方案的选择背后一定带来的是一些取舍 。 谁来决定取舍 , 业务决定 , 如果自己能深度把握这里面的设计思想 , 就不用在乎什么新的轮子新的框架 , 取其设计优点 , 融入自己的业务之中即可 。
- 美股同样陷入结构化,100多家市值超百亿美元公司跌入技术性熊市
- 100年后,人类会被消灭?美国这一技术太狠了,俄连夜警告勿玩火
- 虎鲨战机曾被重点关注,整体性能强大,关键技术长期禁售!
- 中年|悬空的大茶壶不停流水,引众游客好奇观望,原来是这个原理!
- 中国再次突破自我,光伏发电技术,让世界用上1毛钱1度的电
- 技术落后的4个汽车品牌,发动机用的还是10年前技术,谁买谁后悔
- 国产OLED屏终于能崛起了!改用新技术:成功解决蒸镀机卡脖子
- 绿色梦想——漫谈摩托车环保技术(上)
- 原子弹设计图纸、原理已公布,为何还有很多国家造不出原子弹?
- 无视美欧的禁令,向我们提供1500多项关键技术,比俄罗斯还要慷慨
