吳佳興, 周傳生
(沈陽(yáng)師范大學(xué) 科信軟件學(xué)院, 沈陽(yáng) 110034)
?
基于Android平臺(tái)的開(kāi)發(fā)架構(gòu)設(shè)計(jì)
----以家校通移動(dòng)端為例
吳佳興, 周傳生
(沈陽(yáng)師范大學(xué) 科信軟件學(xué)院, 沈陽(yáng) 110034)
近年來(lái)隨著網(wǎng)絡(luò)通訊的快速發(fā)展及智能移動(dòng)設(shè)備的普及,人們對(duì)智能手機(jī)的需求大幅度提升。伴隨著4G網(wǎng)絡(luò)的普及,智能手機(jī)的功能越來(lái)越強(qiáng)大,同時(shí)智能手機(jī)的持有者也對(duì)手機(jī)的要求越來(lái)越高,間接對(duì)移動(dòng)軟件開(kāi)發(fā)者所設(shè)計(jì)軟件的質(zhì)量和穩(wěn)定性提出了更高的要求。早期基于Android智能移動(dòng)設(shè)備的移動(dòng)應(yīng)用,存在著許多瑕疵,如開(kāi)發(fā)效率低下、適配性差、健壯性缺乏、在網(wǎng)絡(luò)較差的情況下,通信效率低下等弊端。針對(duì)現(xiàn)有問(wèn)題,以基于Android移動(dòng)端的“家校通”系統(tǒng)開(kāi)發(fā)為例,闡述了基于Android平臺(tái)移動(dòng)端開(kāi)發(fā)框架的模塊設(shè)計(jì),及相關(guān)設(shè)計(jì)思想,在此基礎(chǔ)上提出了更明確的分層設(shè)計(jì)模式,通過(guò)對(duì)開(kāi)發(fā)架構(gòu)更合理的設(shè)計(jì),較好的解決了上述問(wèn)題。
移動(dòng)設(shè)備; Android; 家校通; 開(kāi)發(fā)架構(gòu)
隨著信息技術(shù)的高速發(fā)展和廣泛應(yīng)用[1]及移動(dòng)手機(jī)應(yīng)用率的提升和更加智能化,移動(dòng)應(yīng)用市場(chǎng)上也相繼涌現(xiàn)了一大批的優(yōu)秀的移動(dòng)應(yīng)用[2],應(yīng)用種類(lèi)涵蓋了我們?nèi)粘I畹母鱾€(gè)方面,移動(dòng)應(yīng)用帶給人們的便利毋庸置疑,且已經(jīng)完成了從方便生活到引導(dǎo)生活的華麗轉(zhuǎn)型[3],尤其在我國(guó)學(xué)校教育信息化建設(shè)全面展開(kāi)的大背景下,信息技術(shù)在校園中更是得到了普遍的應(yīng)用。基于移動(dòng)設(shè)備的教育信息系統(tǒng)也隨著智能移動(dòng)設(shè)備份額的增加而逐步彰顯出它自身的重要性。在智能手機(jī)硬件設(shè)備與時(shí)俱進(jìn)的同時(shí),應(yīng)用軟件開(kāi)發(fā)者也在尋求更好的優(yōu)質(zhì)架構(gòu)來(lái)提升移動(dòng)應(yīng)用的開(kāi)發(fā)效率。針對(duì)該問(wèn)題,本文提出了基于Android平臺(tái)的移動(dòng)端開(kāi)發(fā)架構(gòu),設(shè)計(jì)自身采用了良好的分層開(kāi)發(fā)架構(gòu)[4],將表現(xiàn)層與業(yè)務(wù)模型分離,從而使系統(tǒng)具有更好的靈活性和可維護(hù)性[5],同時(shí)對(duì)Android SDK提出進(jìn)一步的改進(jìn)。
1.1 家校通系統(tǒng)功能分析
鑒于移動(dòng)端對(duì)及時(shí)性有較高要求,家校通移動(dòng)端引入了即時(shí)通信功能,使其可以進(jìn)行教師與家長(zhǎng)之間一對(duì)一的對(duì)話及同班同學(xué)之間的互動(dòng)、群聊、隨時(shí)隨地發(fā)布廣播通知;并以課外交流為主、教學(xué)輔助為輔的準(zhǔn)則設(shè)計(jì)了包括:聯(lián)系人管理,作業(yè)管理,班級(jí)圈分享等功能。
1.2 家校通系統(tǒng)模塊設(shè)計(jì)
根據(jù)系統(tǒng)功能分析,系統(tǒng)初步設(shè)計(jì)了包括移動(dòng)IM、通訊錄、班級(jí)圈、作業(yè)管理、個(gè)人設(shè)置等功能,各功能又包含多個(gè)具體子功能。系統(tǒng)各個(gè)模塊從視圖、后臺(tái)邏輯模型等方面進(jìn)行了相應(yīng)的功能優(yōu)化,使其在UI流暢度、屏幕適配、后臺(tái)任務(wù)調(diào)度機(jī)制、異常處理機(jī)制等相關(guān)方面較傳統(tǒng)系統(tǒng)都有更優(yōu)秀的表現(xiàn)。
2.1 MVC分層開(kāi)發(fā)模式介紹
圖1 MVC模式Fig.1 MVC pattern
MVC模式[6]如圖1所示,將系統(tǒng)劃分為模型、視圖和控制器3部分。模型(Model):模型包含完成業(yè)務(wù)所需要的所有的數(shù)據(jù)、行為和業(yè)務(wù)規(guī)則;視圖(View):視圖是一個(gè)程序的可視化元素集合;控制器(Controller):分發(fā)系統(tǒng)的各種事件和業(yè)務(wù)請(qǐng)求,是視圖與模型間的紐帶。
2.2 視圖層(View)應(yīng)用
視圖(View)是用戶看到并與之交互的界面,它負(fù)責(zé)將應(yīng)用顯現(xiàn)給用戶和顯示模型的狀態(tài)。家校通系統(tǒng)采用分層設(shè)計(jì)原則,主要依賴(lài)Android SDK開(kāi)發(fā),前臺(tái)視圖層采用原生XML布局,本文對(duì)前臺(tái)視圖層進(jìn)行了一部分兼容性?xún)?yōu)化,列表流暢度優(yōu)化(包括加載時(shí)機(jī)、并發(fā)加載量、圖片回收機(jī)制等),圖片存儲(chǔ)優(yōu)化(緩存技術(shù))。
2.3 控制器(Controller)應(yīng)用
在Activity中采用Intent Filter作為視圖分離器,將所有頁(yè)面跳轉(zhuǎn)信息以XML的配置形式體現(xiàn)在androidManifest.xml配置文件中,這種獨(dú)立配置的跳轉(zhuǎn)行為將將視圖和跳轉(zhuǎn)請(qǐng)求進(jìn)行了分離。減小了視圖跳轉(zhuǎn)時(shí)產(chǎn)生的代碼耦合。本設(shè)計(jì)將采用模塊化設(shè)計(jì),力爭(zhēng)實(shí)現(xiàn)一個(gè)邏輯層次清晰,職責(zé)明確的可配置設(shè)計(jì)框架。
2.4 多線程模型(Model)設(shè)計(jì)
圖2 業(yè)務(wù)邏輯層Fig.2 Business logic layer
業(yè)務(wù)層是與問(wèn)題相關(guān)數(shù)據(jù)的邏輯抽象,代表對(duì)象的內(nèi)在屬性,是整個(gè)模型的核心,業(yè)務(wù)代碼是真正完成任務(wù)的代碼,接受視圖請(qǐng)求的數(shù)據(jù),并返回最終的處理結(jié)果。android平臺(tái)的框架設(shè)計(jì)中,不同于普通Web應(yīng)用的是,在android應(yīng)用中,UI線程(主線程)超過(guò)5秒沒(méi)響應(yīng)的話就會(huì)拋出無(wú)響應(yīng)異常(ANR)[7]。Android對(duì)諸如此類(lèi)問(wèn)題,提出了多線程設(shè)計(jì)模型[8],引入了AsyncTask、Handler等多線程任務(wù)類(lèi)[9]和多線程消息模型,本文所提出的開(kāi)發(fā)框架將對(duì)這2種Android原生模型[10]進(jìn)行相應(yīng)改造和優(yōu)化,使其更符合項(xiàng)目需求及用戶操作習(xí)慣。
業(yè)務(wù)層的設(shè)計(jì)主要由3個(gè)模塊組成,如圖2所示。模塊設(shè)計(jì)依照開(kāi)閉原則,模塊與模塊之間具有良好的獨(dú)立性,可以根據(jù)開(kāi)發(fā)需求替換相應(yīng)模塊[11]。模塊分別為Dispatcher消息分發(fā)模塊、Service業(yè)務(wù)處理模塊以及Parser數(shù)據(jù)解析模塊,通過(guò)UI傳來(lái)的請(qǐng)求首先會(huì)被消息分發(fā)模塊接收并進(jìn)行任務(wù)緩存,根據(jù)不同請(qǐng)求分類(lèi)調(diào)用相應(yīng)業(yè)務(wù)方法,業(yè)務(wù)方法的執(zhí)行是有序且異步的,獲取請(qǐng)求結(jié)果后,將需要處理的結(jié)果交給請(qǐng)求解析線程,使用數(shù)據(jù)解析模塊的好處在于提升應(yīng)用流暢性,并屏蔽相關(guān)異常。
此章節(jié)將用一次典型的客戶請(qǐng)求作為主線介紹基于Android移動(dòng)端的處理請(qǐng)求的各個(gè)環(huán)節(jié)[12]如何運(yùn)作,圖3表明了請(qǐng)求流向及各個(gè)組件[13]間的處理順序。
圖3 請(qǐng)求流向Fig.3 Request dispatch
一次請(qǐng)求過(guò)程多數(shù)是由用戶發(fā)起,通常是觸發(fā)頁(yè)面上的相關(guān)控件[14],請(qǐng)求通過(guò)Controller交由分發(fā)線程,分發(fā)線程通過(guò)內(nèi)置的Handler(內(nèi)置隊(duì)列)對(duì)象確定任務(wù)的先后提交順序,并將請(qǐng)求分發(fā)給相應(yīng)的Service業(yè)務(wù)方法響應(yīng)請(qǐng)求(網(wǎng)絡(luò)請(qǐng)求,本地?cái)?shù)據(jù)查詢(xún)等)。這樣一次完整的請(qǐng)求就在多個(gè)獨(dú)立模塊的配合下完成了。具體細(xì)節(jié)將在下幾小節(jié)將以獲取好友列表為例給與介紹。
3.1 使用意圖過(guò)濾器(Intent Filter)解耦獲取好友頁(yè)面請(qǐng)求
獲取好友請(qǐng)求是由用戶通過(guò)切換好友選項(xiàng)卡發(fā)起的,在經(jīng)過(guò)后臺(tái)Service獲取到相應(yīng)數(shù)據(jù)后將獲取的結(jié)果返回至相應(yīng)界面,用于響應(yīng)用戶請(qǐng)求[15]。本系統(tǒng)采用Intent Filter隱式跳轉(zhuǎn),達(dá)到視圖跳轉(zhuǎn)請(qǐng)求之間的解耦的目的,一個(gè)獲取好友展示頁(yè)面的跳轉(zhuǎn)行為具體以URI形式指定跳轉(zhuǎn)地址,通過(guò)指定URI的scheme、host、pathPrefix等屬性動(dòng)態(tài)配置跳轉(zhuǎn)目的地址。以此達(dá)到視圖代碼解耦的目的。
3.2 使用任務(wù)分發(fā)線程(Dispatcher Thread)分發(fā)獲取好友請(qǐng)求
Dispatcher內(nèi)存在一個(gè)異步的Handler,所有的請(qǐng)求都會(huì)通過(guò)這個(gè)Handler轉(zhuǎn)發(fā),因?yàn)檗D(zhuǎn)發(fā)請(qǐng)求是通過(guò)子線程的方式進(jìn)行的,所以轉(zhuǎn)發(fā)操作不會(huì)影響到UI線程的流暢性,于此同時(shí)Handler內(nèi)置的消息隊(duì)列保持了請(qǐng)求消息的順序,這對(duì)某些需求執(zhí)行順序的請(qǐng)求至關(guān)重要,在Dispatcher類(lèi)外部調(diào)用的是dispatch方法,然后通過(guò)handler將請(qǐng)求轉(zhuǎn)換到對(duì)應(yīng)的perform方法。完成請(qǐng)求的轉(zhuǎn)換。
3.3 Json解析線程 (JsonParser Thread)解析好友數(shù)據(jù)
JsonParser將開(kāi)啟新的線程來(lái)進(jìn)行AsyncTask返回的結(jié)果解析,由于家校通采用JSON格式通訊,所以系統(tǒng)提供內(nèi)置的JsonParser用以解析JSON格式,JSON解析采用jackson開(kāi)源框架,將所接收到的JSON信息轉(zhuǎn)換為EntityBean以方便上層解析。
3.4 對(duì)于Android SDK其它優(yōu)化
Android原生SDK對(duì)應(yīng)用的支持并不是十分完美,在列表更新、緩存同步鎖、線程池等地方都存在著許多瑕疵,例如Android ListView Adapter的notifyDataSetChanged()方法,在大數(shù)據(jù)量刷新數(shù)據(jù)時(shí)通常會(huì)刷新所有列表,本設(shè)計(jì)亦給予優(yōu)化,對(duì)列表的刷新使用局部刷新方法,減少了列表刷新的范圍,增強(qiáng)了UI的流暢性。
緩存結(jié)構(gòu)使用lrucache結(jié)構(gòu),本設(shè)計(jì)對(duì)其進(jìn)行了讀寫(xiě)鎖優(yōu)化,摒棄原始synchronized對(duì)象鎖,采用粒度更小的讀寫(xiě)鎖。使得緩存在讀取速度方面較原來(lái)的對(duì)象鎖機(jī)制有了進(jìn)一步的提升。
本文以“家校通”移動(dòng)端為例提出并設(shè)計(jì)了一種基于Android平臺(tái)的便捷開(kāi)發(fā)架構(gòu),視圖層采用Android原生XML進(jìn)行布局,使用Android SDK 內(nèi)置的Intent Filter機(jī)制作為視圖分離器,業(yè)務(wù)邏輯層采用多線程模型,模塊彼此獨(dú)立,各司其職,請(qǐng)求分發(fā)模塊負(fù)責(zé)請(qǐng)求的調(diào)度、Service業(yè)務(wù)模塊則處理相應(yīng)的邏輯請(qǐng)求、最后由數(shù)據(jù)解析模塊負(fù)責(zé)返回?cái)?shù)據(jù)的解析。本文所設(shè)計(jì)的華創(chuàng)家校通移動(dòng)端(已在各大應(yīng)用市場(chǎng)上線),就是在此架構(gòu)下進(jìn)行了核心功能設(shè)計(jì)。
使用此架構(gòu)會(huì)對(duì)應(yīng)用開(kāi)發(fā)提供了許多便利,提升了應(yīng)用的健壯性,具體如下:1)分發(fā)線程的內(nèi)置隊(duì)列機(jī)制,保證了請(qǐng)求的順序,這對(duì)依賴(lài)請(qǐng)求順序的相關(guān)功能帶來(lái)了方便;2)開(kāi)發(fā)架構(gòu)優(yōu)化了一部分原生Android SDK的類(lèi)代碼,涉及到網(wǎng)絡(luò)、任務(wù)隊(duì)列、線程池、讀寫(xiě)鎖、異常處理等方面;3)數(shù)據(jù)解析線程屏蔽了一些常規(guī)異常;4)業(yè)務(wù)層采用多線程模型大大減少了UI線程的壓力,增加了其流暢性。
[ 1 ]范潔. 基于Android的移動(dòng)“家校通”系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 中國(guó)信息技術(shù)教育, 2014(19):124-126.
[ 2 ]吳旭. 基于移動(dòng)通信平臺(tái)的家校通系統(tǒng)研究與實(shí)現(xiàn)[D]. 武漢:華中科技大學(xué), 2007.
[ 3 ]張志勛. 移動(dòng)終端支持下的家校合作平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 上海:華東師范大學(xué), 2015.
[ 4 ]劉亮,霍劍青,郭玉剛,等. 基于MVC的通用型模式的設(shè)計(jì)與實(shí)現(xiàn)[J]. 中國(guó)科學(xué)技術(shù)大學(xué)學(xué)報(bào), 2010,40(6):635-639.
[ 5 ]田娟,徐釗. 基于J2EE的MVC設(shè)計(jì)模式的分析與思考[J]. 計(jì)算機(jī)與現(xiàn)代化, 2010(10):54-58.
[ 6 ]薛峰,梁鋒,徐書(shū)勛,等. 基于Spring MVC框架的Web研究與應(yīng)用[J]. 合肥工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版), 2012,35(3):337-340.
[ 7 ]楊杰. 基于Android的多線程處理技術(shù)[J]. 電腦知識(shí)與技術(shù), 2013,18(9):4251-4254.
[ 8 ]傅偉. 基于Android的校園通系統(tǒng)設(shè)計(jì)[J]. 廊坊師范學(xué)院學(xué)報(bào)(自然科學(xué)版), 2015,15(6):24-29.
[ 9 ]陳星,楊春花. Android異步技術(shù)的對(duì)比實(shí)驗(yàn)及應(yīng)用[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2016(2):188-191.
[10]章蓬陽(yáng),邵帥. Android異步框架的研究與設(shè)計(jì)[J]. 軟件, 2016(2):150-154.
[11]張俊暉. Android即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 自動(dòng)化與儀器儀表, 2016,37(2):64-66.
[12]公磊,周聰. 基于Android的移動(dòng)終端應(yīng)用程序開(kāi)發(fā)與研究[J]. 計(jì)算機(jī)與現(xiàn)代化, 2008(8):85-89.
[13]姚昱旻,劉衛(wèi)國(guó). Android的架構(gòu)與應(yīng)用開(kāi)發(fā)研究[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2008(11):110-112.
[14]趙亮,張維. 基于Android技術(shù)的界面設(shè)計(jì)與研究[J]. 電腦知識(shí)與技術(shù), 2009,5(29):8183-8185.
[15]曾健平,邵艷潔. Android系統(tǒng)架構(gòu)及應(yīng)用程序開(kāi)發(fā)研究[J]. 微計(jì)算機(jī)信息, 2011(9):1-3.
Architecture design base on Android platform Taking family-school communication for example
WU Jiaxing, ZHOU Chuansheng
(Software College, Shenyang Normal University, Shenyang 110034, China)
In recent years, with the rapid development of internetwork communications and smart mobile devices, the demand for smartphones improved significantly, according to incomplete statistics, only in 2015, the domestic smartphone sales had exceeded 400 million, with the popularity of 4G networks, smartphones become more powerful, and person who using smartphone also increasingly high needs for mobile phones, which also indirectly for mobile software developers to design quality and stability of the software made more high request; early Android applications, there are many defects, such as the development of low efficiency, poor adaptation, lack of robustness in a poor network environment, inefficient communication, and so on. Based on these existing problems, this paper based on the Android mobile taking “family-school” system for example to explain the Android platform for mobile and module design based development framework, and related design ideas, on this basis, we propose a clearer division layer design mode, by appropriately adjusting the rational design and development of related infrastructure, a better solution to the above problem.
mobile device; Android; family-school communication; architecture
2016-04-12。
遼寧省教育廳普通高等學(xué)校本科教學(xué)改革研究項(xiàng)目(遼教發(fā)[2016]23號(hào))。
吳佳興(1990-),男,遼寧鐵嶺人,沈陽(yáng)師范大學(xué)碩士研究生; 通信作者: 周傳生(1966-),男,安徽霍邱人,沈陽(yáng)師范大學(xué)教授,碩士。
1673-5862(2016)03-0359-04
TP311.5
A
10.3969/ j.issn.1673-5862.2016.03.021