【编者按】本文作者@叶江水中氧,是对于Web App或夭折,Hybrid App才是新世界的王一文做出分析和讨论。
对后者中持不同意见的部分,作者表示到:“对于‘HybridApp取代WebApp’的观点很是疑惑。稍有不满的则是文中就Rexsee的对比与评价”。同时表示欢迎各位参与其中的讨论
首先,针对于文章的主要观点,我这边的考虑是:WebApp还属初期,HybridApp只是在NativeApp与WebApp之间提供了多的一种选择,而非取代或是替换。
展开来看可能会有如下的几个问题:
基于网页的WebApp短期内将遇到发展瓶颈。因为标准化问题和终端设备功能的支持程度,很难在短时间内找到确切的解决方案。
NativeApp、WebApp以及HybridApp均会是移动应用的不同选择。“NativeAPP,就像桌面版的C/S架构,WebApp,就像桌面版的B/S架构,20年了,B/S也没完全取代C/S。”HybridApp也就可理解为B/S和C/S混合架构,针对于具体的应用场景会有特定的优势体现而已。
不同的选择需做出取舍,鱼与熊掌难以兼得。不同的应用形态优势与劣势同样明显,这取决于具体的应用需求;执行效率、设备功能支持或是跨平台需求,各种价值有时会相互冲突。
HybridApp也无法兼具两者优势同时屏蔽劣势,在不做取舍的情况下其特点不过是交集求和。比如,跨平台需求与不同平台Native View的协同。
简单说来,不同应用形态同时具备了其优劣特点,无论是具体的应用实现,还是开发平台或中间件工具都需做出选择,而非一味迎合或避重就轻。
其次,针对于文中关于Rexsee的相关特点对比有较多偏差,在此简单指正。
按原文中的定义,Rexsee也是一个HybridApp的移动应用中间件,只是在产品策略方面做出了取舍,比如跨平台特性。为获取更好的执行效率与UI交互,以及更全面的功能覆盖程度,Rexsee仅支持Android。并且在较长时间内无意跨平台。
目前开放了接近2000个扩展API,覆盖95%左右Android原生功能(使用js的方式直接调用实现,在Rexsee社区可以查看详细说明与全部实现源码)
支持WebView与NativeView混合,利用JS实现Android原生UI布局与交互(Rexsee提供rexseeJavaview扩展,用于创建和管理原生界面元素,具体见附)
其它则是诸如使用Webkit内核,支持第三方任意开发框架等特性,不再反复描述了。如下表格,就原文中的一些细项对比给出自己的判断。单纯只是Rexsee自身,仅用以对有误的地方做出指正,无需过多对比。
如下是用Rexsee扩展javaview所实现的完全等同于原生界面的展现示例:
部分源码:
rexseeJavaView.create(‘setupList’,'ListView’,'mode:view;background-color:#000000;vertical-spacing:1px;’);//创建一个列表View
rexseeJavaView.create(‘enablecheckBox’,'CheckBox’,’..label:启用来电;…’);//创建一个可勾选的View
rexseeJavaView.create(‘whoDiv’,'FrameLayout’,”);//创建一个Frame布局。
rexseeJavaView.create(‘wD111′,’TextView’,'…label:来电人;…’);//创建一个文本标签。
rexseeJavaView.create(‘wD112′,’TextView’,'…label:’+c_who+’;…’);//创建一个文本标签。
rexseeJavaView.create(‘wD113′,’TextView’,'…label:选择;…’);//创建一个文本标签。
rexseeJavaView.setChilds(‘whoDiv’,'wD111|wD112|wD113′);//将文本标签放入Frame布局中。
rexseeJavaView.create(‘timeDiv’,'FrameLayout’,”);
rexseeJavaView.create(‘tD111′,’TextView’,'…label:时间;…’);
rexseeJavaView.create(‘tD112′,’TextView’,'…label:’+c_time+’;…’);
rexseeJavaView.create(‘tD113′,’TextView’,'…label:选择;…’);
rexseeJavaView.setChilds(‘timeDiv’,'tD111|tD112|tD113′);//将文本标签放入Frame布局中
//—————————————————————————–
rexseeJavaView.create(‘ringtoneDiv’,'FrameLayout’,”);
rexseeJavaView.create(‘rtD111′,’TextView’,'…label:铃声;…’);
rexseeJavaView.create(‘rtD112′,’TextView’,'…label:’+c_ringtone+’;…’);
rexseeJavaView.create(‘rtD113′,’TextView’,'…label:选择;…’);
rexseeJavaView.setChilds(‘ringtoneDiv’,'rtD111|rtD112|rtD113′);//将文本标签放入Frame布局中
//——————————————————————————–
rexseeJavaView.create(‘upanddowncheckBox’,'CheckBox’,'…label:振动;…’);
rexseeJavaView.setChilds(‘setupList’,'enablecheckBox|whoDiv|timeDiv|ringtoneDiv|upanddowncheckBox’);//将启用、联系人、时间、铃声选择、震动选择放入列表布局
rexseeJavaBar.add(‘setupList’,'bar-position:top;height:306px;border-width:0px;padding-bottom:1px;’);//将列表布局放入顶部的Bar容器内。
rexseeJavaView.create(‘btlinearLayout’,'LinearLayout’,'orientation:x;width:fillparent;’);//创建顺序布局
rexseeJavaView.create(‘btstart’,'Button’,'label:启动;width:’+c_winwidth/2+’;event-touch:true;’);//创建按钮
rexseeJavaView.create(‘btexit’,'Button’,'label:退出;width:’+c_winwidth/2+’;event-touch:true;’);//创建按钮
rexseeJavaView.setChilds(‘btlinearLayout’,'btstart|btexit’);//将两个按钮放入到顺序布局
rexseeJavaBar.add(‘btlinearLayout’,'bar-position:bottom;height:80px;border-width:0px;’);//将顺序布局放入到底部的Bar容器内。
关于更多原生UI类应用可在如下链接获取应用:http://www.rexsee.com/CN/app/appList.php?category=multimedia
附:Rexsee所提供的原生UI扩展
详细可下载Rexsee开发手册,直接运行查看效果:http://vdisk.weibo.com/s/2wqWO/1329189032
或直接扫码:
rexseeJavaView对象及事件,用于创建和管理原生界面布局元素,支持一下原生布局,(API8的全部布局)
布局类型(可以添加子对象):
AbsoluteLayout
Div(Rexsee扩展)
FrameLayout
Gallery
GridView
HorizontalScrollView
LinearLayout
ListView
RadioGroup
RelativeLayout
ScrollView
SlidingDrawer
TableLayout
TableRow
ThreeDGallery(Rexsee扩展)
ViewAnimator
ViewFlipper
ViewSwitcher
基本类型(不可添加子对象):
AnalogClock
Button
CheckBox
Chronometer
DatePicker
DigitalClock
EditText
ImageButton
ImageSwitcher
ImageView:支持多点触摸的缩放。
LabelDiv(Rexsee扩展)
ProgressBar
ProgressDiv(Rexsee扩展)
RadioButton
RatingBar
SeekBar
Spinner
SurfaceView
TextSwitcher
TextView
TimePicker
ToggleButton
VideoView
WebView/Browser/BrowserDiv(Rexsee扩展)
ZoomControls
注意:特别提一下其中的SurfaceView类型,可以进行3D绘图,类似于HTML5的Canvas,基于Android Camera 3D绘图机制。
rexseeJavaDialog对象及事件:将JavaView元素显示在对话框中。
rexseeJavaBar对象:将JavaView元素直接覆盖在布局中。
rexseeDrawable对象:预载入图片并进行简单处理。
rexseeImageDialog对象及事件:显示图片用的对话框,支持多点触摸的缩放。
rexseeButtonDialog对象及事件:显示一组按钮。