章亦葵,王哲文
(天津大學(xué) 軟件學(xué)院,天津300072)
隨著智能手機市場的發(fā)展,Android已經(jīng)成為了當(dāng)前市場中的主流平臺,而Android平臺程序也隨之成為了開發(fā)的熱門。針對目前Android平臺編程的現(xiàn)狀,本文采用HTML、CSS、JavaScript語言來編寫Android平臺應(yīng)用程序,利用HTML簡單的布局,很大程度地提高了編程效率。[1]系統(tǒng)的設(shè)計按照軟件工程的思路,從需求開始,到設(shè)計、編碼實現(xiàn)、測試交付,完整地完成了一個軟件周期。
Android是基于Linux內(nèi)核的軟件平臺操作系統(tǒng),早期由Google公司開發(fā),后由開放手機聯(lián)盟Open Handset Alliance開發(fā)。[2,9-10]它包括操作系統(tǒng)、用戶界面、應(yīng)用程序以及移動電話工作所需的全部軟件。它采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分:
① 底層以Linux核心為基礎(chǔ),由C語言開發(fā),只提供基本功能。
② 中間層包括函數(shù)庫Library和虛擬機Virtual Machine,由C++開發(fā)。
③ 最上層是各種應(yīng)用軟件,包括通話程序、短信程序等,應(yīng)用軟件由各公司自行開發(fā),以Java編寫。[3-4]
隨著Android系統(tǒng)的不斷發(fā)展,由Google公司主導(dǎo)的Android已經(jīng)開始向Iphone發(fā)起挑戰(zhàn)。[5]Android系統(tǒng)架構(gòu)圖如圖1所示。
Dojo是一個用JavaScript語言實現(xiàn)的開源DHTML工具包。它是在幾個項目捐助基礎(chǔ)上建立起來的(nWidgets、Burstlib、f(m)),這也是叫它a"unified"toolkit的原因。Dojo的目標(biāo)是解決開發(fā)DHTML應(yīng)用程序中遇到的那些長期存在的歷史問題以及Historical problems with DHTML跨瀏覽器問題。[6]
Dojo有以下的特征:
◆利用Dojo提供的組件,你可以提升Web應(yīng)用程序的可用性、交互能力以及性能。
◆可以更容易地建立互動的用戶界面,同時Dojo提供小巧的動態(tài)處理工具。
◆利用它的低級API和可兼容的代碼,能夠?qū)懗鲚p便的、單一風(fēng)格的JavaScript代碼。Dojo的事件系統(tǒng)、I/O的API以及通用語言形式是基于一個強
圖1 Android系統(tǒng)架構(gòu)圖
大的編程環(huán)境。
◆通過Dojo提供的工具,可以為你的代碼寫命令行式的單元測試代碼。
◆Dojo的擴展包能夠使你的代碼更容易維護(hù),耦合性更低。
Dojo通過很少的代碼完成了以上的功能。當(dāng)寫腳本時,只需要包含很少的JS文件,也可以有選擇地下載Dojo提供的龐大的功能。
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。它基于JavaScript(Standard ECMA-262 3rd Edition-December 1999)的一個子集。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言,易于人閱讀和編寫,同時也易于機器解析和生成。[7]
JSON建構(gòu)于兩種結(jié)構(gòu):
① “名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object)、記錄(record)、結(jié)構(gòu)(struct)、字典(dictionary)、哈希表(hash table)、有鍵列表(keyed list)或者關(guān)聯(lián)數(shù)組(associative array)。
② 值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數(shù)組(array)。
本文中推薦使用Ubuntu 10.0.1版本的操作系統(tǒng),開發(fā)平臺使用Eclipse集成開發(fā)環(huán)境。服務(wù)器使用Tomcat 6.0版本,數(shù)據(jù)庫使用開源的 MYSQL5.0,JDK版本采用1.6,Android的SDK版本采用10.0.1。[8]
本文設(shè)計了一個小的場景作為程序的需求,如圖2所示。
圖2 系統(tǒng)需求用例圖
首先來解釋圖2中所示的需求,假設(shè)和朋友一起外出,到了吃飯的時候,首先通過應(yīng)用程序來查找附近的飯店,然后選擇一家餐館用餐,用餐之后通過手機進(jìn)行支付,同時在應(yīng)用中分享對餐館的評價。由于需要進(jìn)行查看餐館優(yōu)惠信息、查看餐館評價等活動,需要進(jìn)行大量的運算和存儲,因此,本程序設(shè)計是將數(shù)據(jù)的運算和存儲都放到了云端,而手機端只進(jìn)行簡單的數(shù)據(jù)解析和顯示。這樣的云端加手機端的設(shè)計,既發(fā)揮了云端計算速度快、存儲容量大的特點,又發(fā)揮了移動端便攜的優(yōu)勢。
總體上講系統(tǒng)設(shè)計為兩個部分:一部分是手機上的客戶端,另一部分是遠(yuǎn)程的服務(wù)器端。手機端負(fù)責(zé)向服務(wù)器端發(fā)送請求,顯示服務(wù)器端返回的信息,而服務(wù)器端則響應(yīng)手機端的請求,將信息按照指定的格式返回。由于本程序?qū)?shù)據(jù)的運算和存儲都在云端進(jìn)行,因此手機端和云端需要有大量的數(shù)據(jù)交換,為了應(yīng)對由此產(chǎn)生的流量問題,決定采用輕量級的JSON數(shù)據(jù)結(jié)構(gòu)作為手機端和云端進(jìn)行數(shù)據(jù)交換的格式。這樣既能減少因為數(shù)據(jù)交換而產(chǎn)生的流量,又可以完成手機端和云端之間頻繁的數(shù)據(jù)交換。
本文中主要進(jìn)行手機端應(yīng)用程序的設(shè)計。使用HTML、CSS、JavaScript作為開發(fā)語言,運用Dojo框架完成手機端應(yīng)用程序的開發(fā)。與服務(wù)器的交互采用JSON輕量級的數(shù)據(jù)格式,在頁面展示部分運用Dojo框架輔助進(jìn)行展示。
用戶登錄系統(tǒng)之后,選擇查看附近餐館信息,此時手機端系統(tǒng)會向遠(yuǎn)端的服務(wù)器發(fā)送包含自身經(jīng)緯度信息的請求,服務(wù)器端接收請求之后,進(jìn)行運算和查找,將返回的信息用JSON格式進(jìn)行包裝發(fā)送回手機端,查看附近餐館時序圖、查看餐館信息流程如圖3、圖4所示。
圖3 查看附近餐館時序圖
圖4 查看餐館信息流程
用戶在登錄系統(tǒng)之后,選擇查看附近餐館信息,當(dāng)用戶選擇其中一間餐館進(jìn)行詳細(xì)查看的時候,就能夠看到餐館全部的信息以及其他用戶對餐館的評價。手機端會向服務(wù)器端發(fā)送包含餐館ID以及評論條數(shù)作為參數(shù)的信息,服務(wù)器端接收到信息之后會將信息以JSON格式發(fā)送回來。手機端在對接收到的信息進(jìn)行解析之后,將信息顯示出來。查看餐館信息時序圖、查看餐館評價信息流程如圖5、圖6所示。
圖5 查看餐館信息時序圖
圖6 查看餐館評價信息流程
用戶在登錄系統(tǒng)之后,查看了某一餐館的具體信息,如果這家餐館有打折活動,就可以查看這家餐館的優(yōu)惠信息。手機端會向服務(wù)器端發(fā)送請求,服務(wù)器端會將這家餐館的全部打折信息以JSON格式返回。手機端接收到信息之后,進(jìn)行解析顯示,查看餐館優(yōu)惠信息時序圖、查看餐館優(yōu)惠信息流程如圖7、圖8所示。
圖7 查看餐館優(yōu)惠信息時序圖
圖8 查看餐館優(yōu)惠信息流程
用戶在用餐完畢之后,可以選擇對這家餐館進(jìn)行評價,同時可以將評價信息分享到微博等社交工具上,方便朋友們進(jìn)行參考。手機會將評價信息以JSON格式發(fā)送到服務(wù)器上,服務(wù)器將數(shù)據(jù)解析之后存入數(shù)據(jù)庫中,同時利用已經(jīng)開發(fā)好的接口,將信息自動發(fā)往微博保存,發(fā)表評論信息時序圖、發(fā)表評論信息流程如圖9、圖10所示。
圖9 發(fā)表評論信息時序圖
系統(tǒng)樣品展示略——編者注。
圖10 發(fā)表評論信息流程
Android平臺作為當(dāng)前最為流行的平臺,具有巨大的市場潛力,僅僅能夠單機運行的程序勢必會漸漸地被能夠與云端、移動互聯(lián)網(wǎng)相關(guān)聯(lián)的程序所取代??梢灶A(yù)見,未來以Android為平臺的,與云計算、云存儲相結(jié)合的程序?qū)⑹前l(fā)展的主流,將是嵌入式智能手機應(yīng)用程序的發(fā)展方向。使用Dojo作為開發(fā)框架,能夠提高布局編程效率,降低了移動互聯(lián)網(wǎng)程序的門檻,使移動互聯(lián)網(wǎng)程序更加容易開發(fā)。
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。
[1] J F DiMarzio.Android:A Programmer's Guide[M].New York:McGraw-Hill,2009.
[2] 公磊,周聰.基于Android的移動終端應(yīng)用程序開發(fā)與研究[J].計算機與現(xiàn)代化,2008(8).
[3] 韓超,粱全.Android系統(tǒng)原理開發(fā)要點詳解[M]北京:電子工業(yè)出版社,2010.
[4] 靳巖,姚尚朗.Android入門開發(fā)與實踐[M].北京:人民郵電出版社,2009.
[5] 楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機械工業(yè)出版社,2010.
[6] Rawld Gill,Craig Riecke,Alex Russell.精通 Dojo[M].北京:人民郵電出版社,2009.
[7] Douglas Crockford.JavaScript語言精粹[M].北京:電子工業(yè)出版社,2009.
[8] 余志龍.Android SDK開發(fā)范例大全[M].北京:人民郵電出版社,2009:120-150.
[9] 王向輝,張國印,沈潔.Android應(yīng)用程序開發(fā)[M].北京:清華大學(xué)出版社,2010:1-60.
[10] E2ECloud工作室.深入淺出 Google Android[M].北京:人民郵電出版社,2009.