首先,針對於文章的主要觀點,我這邊的考慮是: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類應用可在如下連結獲取應用:https://www.rexsee.com/CN/app/appList.php?category=multimedia
附:Rexsee所提供的原生UI擴展
詳細可下載Rexsee開發手冊,直接運行查看效果:https://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對象及事件:顯示一組按鈕。
作者:@葉江水中氧
(Warlial 供雷鋒網專稿,轉載請註明!)