hybrid混合开发初尝
2015-08-12 01:26
183 查看
hybrid混合开发初尝
>这是我第一次写markdown博客,也算是一种尝试吧。小菜鸡一枚,以下内容写的不好的,求轻喷。
hybrid一直都是很热门的话题,简单的说,纯native开发固然体验好但是开发成本高,迭代周期长,某商店还需要审核周期,并不能做到热更新,那么某些轻量级的需求,尤其是总是会变动的界面以及数据显示等,用native就会比较麻烦;纯web app成本确实相对低,但是体验确实不太好,太依赖网络了,而且纯web app能调用的api是跟不上native速度的,也就是说,例如iOS8更新了4000+个API,那么等web跟上这个脚步那不知道要多长时间。这个时候,一种折中的方案——混合开发(hybrid)就出现了。
我理解的混合开发是这样的:
native:原生主要的任务是提供底层API支持和APP对性能、交互等要求比较高的用原生来完成;
h5:这部分主要是用于变化较大、经常改动、对热更新要求较高的业务需求,类似APP的“通知中心”等;
bridge:桥的作用主要是将native和h5链接起来,提供一个管道供二者安全的相互调用。
在公司做小业务,其中一个需求丢到我这里:APP的通知中心开发,这部分leader让上hybrid,于是我还自己看了一些介绍hybrid的链接,最后选择了(当然是leader拍板的)cordova解决方案。cordova是phonegap的开源版本,现在是Apache下的顶级项目,相对成熟稳定,所以我必须没有意见,于是就去踩坑了,原谅我菜并没有做过类似的东西。
简单的说,cordova提供了Android(我是Android开发工程师)下的webview控件——cordovawebview支持,同时提供了cordovaActivity,然后cordova有一套plugin,是让native和h5交互的管道。这里提一下,由于Android4.2以下addjavascriptinterface的安全性问题,cordova对4.2以上和4.2以下分别作了处理:4.2以上继续使用addjavascriptinterface,4.2以下则使用prompt方式,详细细节请看上述链接。
这部分主要由我和一位web前端同事负责(原谅我太菜不会写js)。native这边主要是封装好原生业务逻辑和提供给h5的方法调用接口,然后通过cordovaplugin和h5进行交互,只要
public xxxClass extend CordovaPlugin
就可以继续写了,我这边还是比较简单的我觉得,因为我是用cordovawebview嵌入到一个fragment里,所以在插件类中,我都是用EventBus分发事件,然后在需要处理的时候订阅处理就行。h5那边我感觉写懵逼了,因为也没有类似经验吧,cordova.exec没封装就直接写出来了,然后在cordova.js没load完的时候,exec方法是not find的,然后同事采取的方案简单粗暴——直接setTimeout,啊哈哈最后写到他自己逻辑都乱了……我看了看官方文档,正确的做法应该是监听cordova的ondeviceready事件,然后在回调用做cordova相关的操作,这时候cordova.js就会load好了。
其实也不知道写了些什么,整个过程就是这样了……
后续这部分我们几个人同事讨论了下,还是采取自己写cordova插件,然后用过cli去安装,这样在js代码中就不会出现exec这种东西了……这部分主要都是给js调原生API用的。慢慢丰富起来我们自己的业务逻辑插件就好啦~
>一枚Android开发小菜鸡 落笔
相关文章推荐
- hdu1301 prim和kruskal求最小生成树
- 设计模式:1.2 工厂模式
- HDU 4321 Arcane Numbers 2 按位处理, 想法计数题
- iOS包管理工具Cocoapods的安装与使用
- HDUOJ_1875(最小生成树)(畅通工程再续)(克鲁斯卡尔和prim两种方法解)
- 黑马程序员——ios学习笔记 OC Foundation—NSArray&NSDictionary
- Ray Wenderlich的swift教程02--引用类型和值类型
- Hibernate缓存非常烦人,想要最新数据连session.clear都不好使
- 黑马程序员——ios学习笔记 OC Foundation—NSString
- Quartz2D复习(四) --- 图层CALayer和动画CAAnimation
- Scala 深入浅出实战经典 第5讲:Scala数组操作实战详解
- 黑马程序员——ios学习笔记 OC 分类
- 数据结构基础温故-7.排序
- 黑马程序员——ios学习笔记 OC 协议&Block
- F - Friends-HDU 5305
- 事件引入和本质
- golang 数组切片(一)
- 互联网电商大数据环境 ——大数飓数据分析实践培训精华笔记(五)——数据仓库维度建模实例
- context.drawImage绘制图片
- nginx服务器去掉url中的index.php 和 配置path_info