雷靜
摘要:隨著移動互聯(lián)技術(shù)的發(fā)展,農(nóng)產(chǎn)品銷售也進入互聯(lián)網(wǎng)時代。該項目是一個農(nóng)產(chǎn)品電商平臺,具有多種客戶端:網(wǎng)頁,手機網(wǎng)頁,Android客戶端,IOS客戶端,微信小程序等。該文主要研究Android端應(yīng)用程序的架構(gòu)設(shè)計。根據(jù)項目的特點及要求,對多種Android網(wǎng)絡(luò)通信框架,Android圖片加載框架進行比較后,選擇Volley框架負責(zé)與服務(wù)器端進行網(wǎng)絡(luò)通信;選擇Gson框架實現(xiàn)JSON數(shù)據(jù)與Java對象的轉(zhuǎn)換;選擇Fresco框架完成大量商品圖片的下載和緩存。通過在項目中引入多種框架,使得系統(tǒng)的架構(gòu)設(shè)計更加高效,更加合理。
關(guān)鍵詞:Android程序;Volley;Gson;Fresco
中圖分類號:TP311.52? ? ? ?文獻標識碼:A
文章編號:1009-3044(2019)24-0282-02
開放科學(xué)(資源服務(wù))標識碼(OSID):
在我國鄉(xiāng)村振興戰(zhàn)略的指引下,移動互聯(lián)技術(shù)迅速融入農(nóng)業(yè)發(fā)展的各個方面,農(nóng)產(chǎn)品的銷售途徑也因此有了很大的變化。從單一的實體銷售,向移動電子商務(wù)的方向迅猛發(fā)展起來。為了方便用戶的使用,利用移動互聯(lián)技術(shù),電子商務(wù)平臺為用戶提供電腦網(wǎng)頁、手機網(wǎng)頁和APP,或是微信小程序等多種訪問方式實現(xiàn)農(nóng)產(chǎn)品信息的快速、便捷地購買。
1 系統(tǒng)整體設(shè)計
本電子商務(wù)平臺的后臺采用Struts2,Spring框架設(shè)計完成,分為商家、顧客、管理者三類用戶。商家具有申請開店、編輯商品信息、商品上架、商品下架、商品發(fā)貨等功能;顧客具有瀏覽商品,加入購物車、編輯購物車、編輯收貨地址、付款、查看個人信息,查看訂單等功能;管理者可以管理用戶,查看訂單、查看商品、審核商家等功能。
根據(jù)當(dāng)前的用戶需求和技術(shù)發(fā)展趨勢,提供多種訪問方式:電腦網(wǎng)頁、手機網(wǎng)頁、App、小程序。用戶對某系統(tǒng)依賴度較低,使用頻次較少時,更愿意選擇手機網(wǎng)頁或是小程序的方式,其主要優(yōu)點是不需要下載安裝,不占存儲空間。但這些方式的缺點是不能記錄用戶登錄狀態(tài),使用時需要登錄,或是因為條件限制功能不夠完善?;贏ndroid系統(tǒng)的App是其中重要的一種訪問方式。Android手機是當(dāng)前手機用戶的主要選擇,因此一款基于Android的App仍然是一個應(yīng)用系統(tǒng)的必備用戶訪問方式。
2 Android端設(shè)計
在Android端主要供農(nóng)產(chǎn)品購買者使用,實現(xiàn)的功能主要包含三大模塊:個人管理、商品瀏覽、購物管理。用戶通過個人管理模塊可以實現(xiàn)用戶登錄與退出,修改密碼,查看個人信息,管理收貨地址等功能;商品瀏覽模塊主要包含首頁、商品分類查詢,商品列表,商品詳情展示等功能;購物管理模塊包含添加商品到購物車,支付管理,訂單管理等功能。
在項目的架構(gòu)設(shè)計上,項目分成模型層、接口層、核心層、界面層。模型層封裝所有的實體類。在Android程序與服務(wù)器端交換數(shù)據(jù)格式是JSON對象,在Android程序中需要轉(zhuǎn)換為Java對象。這個轉(zhuǎn)換比較復(fù)雜,流程比較煩瑣,采用數(shù)據(jù)解析框架簡化步驟,提高效率。在接口層完成Android程序調(diào)用服務(wù)器提供的API,需要控制網(wǎng)絡(luò)的訪問與服務(wù)器的連接。在核心層在接口層和界面層之間,負責(zé)處理業(yè)務(wù)邏輯。界面層主要負責(zé)向用戶展示商品,提供操作交互的窗口。為了提高效率,構(gòu)建統(tǒng)一的界面風(fēng)格,采用Fragment類和Activity類相結(jié)合的方式設(shè)計完成。
3 網(wǎng)絡(luò)訪問框架
本系統(tǒng)需要Android端與服務(wù)器進行頻繁的數(shù)據(jù)交互,傳統(tǒng)的兩種方法HttpURLConnection和HttpClient使用率非常高。但是這兩種方法使用起來稍顯復(fù)雜,如果封裝得不適當(dāng)會造成極大的代碼重復(fù),甚至?xí)绊懗绦虻姆€(wěn)定性[1]。Android平臺上有很多網(wǎng)絡(luò)通訊的框架:Volley,Retrofit,OKHttp等獲得廣泛的應(yīng)用。
Volley是Google推出的異步網(wǎng)絡(luò)請求框架和圖片加載框架,特別適合數(shù)據(jù)量小,通信頻繁的網(wǎng)絡(luò)操作。OkHttp是Square公司推出的高性能 http 請求開源庫,但使用的時候稍顯復(fù)雜[2]。Retrofit是Square公司出品的基于OkHttp封裝的一套RESTful網(wǎng)絡(luò)請求框架。該框架使用注解進行配置,方便簡化程序[3]。Retrofit功能強大,但門檻較高;OkHttp性能較高,但需要再次封裝;Volley封裝更好,不適用于較大數(shù)據(jù)的發(fā)送。綜合各方面考慮,本系統(tǒng)采用Volley框架完成網(wǎng)絡(luò)層的網(wǎng)絡(luò)通信工作。
4 數(shù)據(jù)轉(zhuǎn)換框架
本系統(tǒng)采用服務(wù)器/客戶端的結(jié)構(gòu),服務(wù)器與客戶端需要頻繁交互數(shù)據(jù),因此必須選擇一種數(shù)據(jù)量小、安全、通用的數(shù)據(jù)格式作為傳輸?shù)妮d體。JSON作為一種輕量級的數(shù)據(jù)交換語言, 具有安全、快速、通用、數(shù)據(jù)通信量小等特性, 這讓JSON成為理想的數(shù)據(jù)通信方式[4]。但是在Android應(yīng)用程序與服務(wù)器進行數(shù)據(jù)交互的過程中,需要將JSON格式與Java對象進行轉(zhuǎn)換,這個轉(zhuǎn)換是很煩瑣的。為了提高效率,在本項目中采用Gson框架實現(xiàn)數(shù)據(jù)轉(zhuǎn)換。Gson是Google提供的用來進行數(shù)據(jù)JSON格式化和JSON數(shù)據(jù)解析的開源庫[5]。通過Gson框架,一個復(fù)雜煩瑣的解析過程只需要幾行代碼就可以實現(xiàn)轉(zhuǎn)換,可以獲得非常好的封裝性和效率,使用簡單。
5 圖片加載框架
電商平臺需要展示較多的圖片,圖片需要占用較多的內(nèi)存。當(dāng)用戶在瀏覽商品頁面時,通常會需要快速展示大量圖片,直接訪問圖片將會導(dǎo)致卡頓,用戶體驗不佳,甚至出現(xiàn)內(nèi)存溢出。在Android中有許多優(yōu)秀的開發(fā)框架,它們有封裝了較好的算法和緩存策略,可以解決各種圖片加載引起的問題,比較常見的圖像處理框架有[6]:Android Universal Image Loader是一個加載、緩存、展示圖片的庫,但已停止更新,不建議使用;Picasso是著名的開源組織Square出品的圖片下載和緩存的框架,使用者較多;Glide是Google的員工基于Picasso開發(fā),優(yōu)化的,Android官網(wǎng)推薦使用的圖片處理框架;Fresco是Facebook開源的圖片處理框架,真正做到了三級緩存,功能強大。
由于本項目的需要下載和緩存大量各種不同大小、分辨率的商品圖片,因此選擇Fresco框架進行圖片的加載。Fresco中有一個叫作Image Pipeline的模塊。它負責(zé)從網(wǎng)絡(luò),從本地文件系統(tǒng),本地資源加載圖片。為了最大限度節(jié)省空間和CPU時間,它含有3級緩存設(shè)計。Fresco中有一個叫作Drawees模塊,它會在圖片加載完成前顯示占位圖,加載成功后自動替換為目標圖片[7]。當(dāng)圖片不再顯示在屏幕上時,它會及時地釋放內(nèi)存和空間占用。
6 總結(jié)
在Android應(yīng)用程序的開發(fā)中,出現(xiàn)了許多優(yōu)秀的開源框架,利用這些框架可以有效地提高效率,簡化步驟,獲得較高的性能。本項目是一個農(nóng)產(chǎn)品電商銷售平臺,需要頻繁與服務(wù)器進行數(shù)據(jù)交互,需要加載大量的圖片。根據(jù)項目特點,在整體設(shè)計上采用了Volley框架實現(xiàn)網(wǎng)絡(luò)通信訪問,采用Gson框架簡化JSON與Java對象的轉(zhuǎn)換,采用Fresco框架有效下載和緩存圖片。這樣的系統(tǒng)架構(gòu)設(shè)計能夠有效提高系統(tǒng)的效率,簡化開發(fā)的過程,具備較好的可用性和用戶體驗性。
參考文獻:
[1] 孟遠. Android 網(wǎng)絡(luò)通信框架 Volley 的解析和比較[J]. 軟件, 2014, 35(12): 66-68.
[2] VaFlower. Android主流常用網(wǎng)絡(luò)請求框架簡介[EB/OL]. https://www.jianshu.com/p/2bbfc27cffeb.2018.4.4.
[3] SHERLOCKvv. 網(wǎng)絡(luò)加載框架 – Retrofit[EB/OL]. https://www.jianshu.com/p/0fda3132cf98.2018.1.8.
[4] 趙鵬, 駱德漢, 梅領(lǐng)亮. 一種基于JSON的Android終端遠程獲取解析數(shù)據(jù)的方法[J].微型機與應(yīng)用, 2017, 36(21): 57-60.
[5] 李海平, 陳榮征, 李海文. 基于JSON的Android校園助手研究與設(shè)計[J]. 電腦與電信, 2016(16): 24-26.
[6] Yoo-jeong SONGSoo-bin OUJong-woo LEE. An Analysis of Existing Android Image Loading Libraries: Picasso, Glide, Fresco, AUIL and Volley[C]. Proceedings of 2016 International Conference on Informatics, Management Engineering and Industrial Application (IMEIA 2016), 2016(4).
[7] Fresco[EB/OL]. https://www.fresco-cn.org/.
【通聯(lián)編輯:謝媛媛】