版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本科畢業(yè)設(shè)計(jì)論文模板(軟件開(kāi)發(fā)類(lèi))1緒論研究背景(合并1.2)春天里來(lái)百花香,怎么會(huì)不讓人沉醉呢?美麗的花自然好看,但人的創(chuàng)造力更是無(wú)邊,花藝賦予了鮮花更多的話(huà)語(yǔ)表達(dá),想不想接觸甚至做出更多美好的花藝作品呢?花田小憩不僅僅是有專(zhuān)業(yè)的花藝教學(xué)內(nèi)容,它還是一個(gè)活躍的百萬(wàn)花藝愛(ài)好者社區(qū)。在這里,你可以看到各式各樣的話(huà)題討論,不僅限于花藝,還延伸至家居、植物、雜物等生活美學(xué)領(lǐng)域?;ㄌ镄№€提供了眾多高清花藝壁紙,供你下載換桌面,可以適配各種屏幕尺寸。手機(jī)的美觀再也不愁了。花田小憩是一款花藝愛(ài)好者不容錯(cuò)過(guò)的生活應(yīng)用。在這里,收獲的不僅僅是花藝知識(shí),還有同道中人和美的生活方式。讓你的節(jié)奏,慢下來(lái),美下去。
2、作為一個(gè)植物生活美學(xué)平臺(tái),花田小憩還提供跟花藝與生活美學(xué)相關(guān)的物品販賣(mài),如鮮花、器皿、干花、書(shū)籍等。你可以在這里尋找生活的美?;ㄌ镄№瑒?chuàng)辦初衷是想為所有喜歡植物和美學(xué)的人們,通過(guò)花草與時(shí)間的疊加,營(yíng)造一個(gè)小而美的精致生活。希望能讓用戶(hù)在繁瑣的生活之中,享受一種靜雅恬淡的生活之美,制造一份專(zhuān)屬的美學(xué)生活態(tài)度。研究開(kāi)發(fā)現(xiàn)狀分析(1)研發(fā)現(xiàn)狀:現(xiàn)有系統(tǒng)解決領(lǐng)域問(wèn)題及其技術(shù)運(yùn)用現(xiàn)狀的分類(lèi)、分析,優(yōu)缺點(diǎn)分析:總結(jié)現(xiàn)有成果的優(yōu)缺點(diǎn);(2)系統(tǒng)開(kāi)發(fā)的必要性;在上述分析的基礎(chǔ)上,闡明項(xiàng)目研究開(kāi)發(fā)的必要性。主要研究?jī)?nèi)容.(1)技術(shù)路線(xiàn):采用什么技術(shù)、方法、環(huán)境與工具;(2)系統(tǒng)特征:解決的關(guān)鍵問(wèn)題(解決什么問(wèn)題
3、)、達(dá)到什么目標(biāo),實(shí)現(xiàn)什么功能。本文的組織結(jié)構(gòu)此文的分為六部分,其中第一部分為緒論,主要介紹App的研究背景以及國(guó)內(nèi)外形勢(shì),第二部分為相關(guān)技術(shù)和工具綜述,主要分為Android技術(shù)的講解、Android應(yīng)用程序的介紹、Java開(kāi)發(fā)方面的知識(shí)、C/C+開(kāi)發(fā)方面的知識(shí)、硬件抽象層的概述、系統(tǒng)內(nèi)核層的講解、以及Android的安全權(quán)限機(jī)制的深入探討、Android四大組件中Activity的理解以及Android應(yīng)用程序的框架,還有Android系統(tǒng)維護(hù)方面的相關(guān)知識(shí)。2.相關(guān)技術(shù)和工具綜述2.1Android技術(shù)Android是一種以linux為基礎(chǔ)的開(kāi)放源代碼操作系統(tǒng),主要使用于便攜設(shè)備。目前尚
4、未有統(tǒng)一中文名稱(chēng),中國(guó)大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由AndyRubin開(kāi)發(fā),最初主要支持手機(jī)。2005年由谷歌收購(gòu)注資,并組建開(kāi)放手機(jī)聯(lián)盟開(kāi)發(fā)改良,逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上。Android的主要競(jìng)爭(zhēng)對(duì)手是蘋(píng)果公司的ios以及RIM的BlackberryOS。2011年第一季度,Android在全球的市場(chǎng)份額首次超過(guò)塞班系統(tǒng),躍居全球第一。2012年2月數(shù)據(jù),Android占據(jù)全球智能手機(jī)操作系統(tǒng)市場(chǎng)52.5%的份額,中國(guó)市場(chǎng)占有率為68.4%。Android的系統(tǒng)架構(gòu)和其它操作系統(tǒng)一樣,采用了分層的架構(gòu)。android分為四個(gè)層,從高層到低層分別是應(yīng)用
5、程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和linux核心層。Android是以L(fǎng)inux為核心的手機(jī)操作平臺(tái),作為一款開(kāi)放式的操作系統(tǒng),隨著Android的快速發(fā)展,如今已允許開(kāi)發(fā)者使用多種編程語(yǔ)言來(lái)開(kāi)發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開(kāi)發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開(kāi)發(fā)者的歡迎,成為真正意義上的開(kāi)放式操作系統(tǒng)。在Android中,開(kāi)發(fā)者可以使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,也可以通過(guò)NDK使用C/C+作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,也可使用SL4A來(lái)使用其他各種腳本語(yǔ)言進(jìn)行編程(如:python、lua、tcl、php等等),還有其他諸如:QT(qtfor
6、android)、Mono(monoforandroid)等一些著名編程框架也開(kāi)始支持Android編程,甚至通過(guò)MonoDroid,開(kāi)發(fā)者還可以使用C#作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序。另外,谷歌還在2009年特別發(fā)布了針對(duì)初學(xué)者的AndroidSimple語(yǔ)言,該語(yǔ)言類(lèi)似Basic語(yǔ)言。而在網(wǎng)頁(yè)編程語(yǔ)言方面,JavaScript,HTML5等等都已經(jīng)支持Android開(kāi)發(fā)。Android應(yīng)用程序早期的Android應(yīng)用程序開(kāi)發(fā),通常通過(guò)AndroidSD(KAndroid軟件開(kāi)發(fā)包)下使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,但通過(guò)不同的軟件開(kāi)發(fā)包,則使用的編程語(yǔ)言也不同。例如開(kāi)發(fā)者可以通過(guò)And
7、roidND(AndroidNative開(kāi)發(fā)包)使用C語(yǔ)言或者C+語(yǔ)言來(lái)編程語(yǔ)言開(kāi)發(fā)應(yīng)用程序。同時(shí)谷歌還推出了適合初學(xué)者編程使用的Simple語(yǔ)言,該語(yǔ)言類(lèi)似微軟公司的VisualBasic語(yǔ)言。此外,谷歌公司還推出了GoogleAppInventor開(kāi)發(fā)工具,該開(kāi)發(fā)工具可以快速地構(gòu)建應(yīng)用程序,方便新手開(kāi)發(fā)者。JAVA開(kāi)發(fā)方面Android支持使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,而Android的Java開(kāi)發(fā)方面從接口到功能,都有層出不窮的變化。考慮到Java虛擬機(jī)的效率和資源占用,谷歌重新設(shè)計(jì)了Android的Java,以便能提高效率和減少資源占用,因而與J2ME等不同。C/C+開(kāi)發(fā)方面
8、早期的Android開(kāi)發(fā)只支持Java作為編程語(yǔ)言開(kāi)發(fā)應(yīng)用程序,因而使得其他語(yǔ)言開(kāi)發(fā)者只能望而卻步。2010年4月,谷歌正式對(duì)開(kāi)發(fā)者發(fā)布了AndroidNDKNDK允許開(kāi)發(fā)者使用C/C+乍為編程語(yǔ)言來(lái)為Android開(kāi)發(fā)應(yīng)用程序,初版的NDK使得開(kāi)發(fā)者看到了C/C+在Android開(kāi)發(fā)中的希望。但是,當(dāng)前版本的NDG功能上還有很多局限性:NDK并沒(méi)有提供對(duì)應(yīng)用程序生命周期的維護(hù);NDK也不提供對(duì)Android系統(tǒng)中大量系統(tǒng)事件的支持;對(duì)于作為應(yīng)用程序交互接口的UIAPI,當(dāng)前版本的NDK中也沒(méi)有提供。但是相對(duì)于初版的NDK現(xiàn)在的NDK已經(jīng)進(jìn)行了許多重大的功能改進(jìn)。由此可見(jiàn),NDK仍然需要完善和
9、發(fā)展,相信未來(lái)隨著NDK的發(fā)展,NDK可以做得更多更好。硬件抽象層Android的HAL(硬件抽象層)是能以封閉源碼形式提供硬件驅(qū)動(dòng)模塊。HAL的目的是為了把Androidframework與Linuxkernel隔開(kāi),讓Android不至過(guò)度依賴(lài)Linuxkernel,以達(dá)成kernelindependent的概念,也讓Androidframework的開(kāi)發(fā)能在不考慮驅(qū)動(dòng)程序?qū)崿F(xiàn)的前提下進(jìn)行發(fā)展。HALstub是一種代理人(proxy)的概念,stub是以*.so檔的形式存在。Stub向HAL“提供”操作函數(shù)(operations),并由Androidruntime向HAL取得stub的op
10、erations,再callback這些操作函數(shù)。HAL里包含了許多的stub(代理人)。Runtime只要說(shuō)明“類(lèi)型”,即modulelD,就可以取得操作函數(shù)。系統(tǒng)內(nèi)核Android是運(yùn)行于Linuxkernel之上,但并不是GNU/Linux。因?yàn)樵谝话鉍NU/Linux里支持的功能,Android大都沒(méi)有支持,包括Cairo、X11、Alsa、FFmpegGTKPango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android為了達(dá)到商業(yè)應(yīng)用,必須移除被GNUGPL授權(quán)證所約束的部份,例如
11、Android將驅(qū)動(dòng)程序移到userspace,使得Linuxdriver與Linuxkernel徹底分開(kāi)。bionic/libc/kernel/并非標(biāo)準(zhǔn)的kernelheaderfiles。Android的kernelheader是利用工具由Linuxkernelheader所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)構(gòu)與宏。安全權(quán)限機(jī)制Android本身是一個(gè)權(quán)限分立的操作系統(tǒng)。在這類(lèi)操作系統(tǒng)中,每個(gè)應(yīng)用都以唯一的一個(gè)系統(tǒng)識(shí)別身份運(yùn)行(Linux用戶(hù)ID與群組ID)。系統(tǒng)的各部分也分別使用各自獨(dú)立的識(shí)別方式。Linux就是這樣將應(yīng)用與應(yīng)用,應(yīng)用與系統(tǒng)隔離開(kāi)。系統(tǒng)更多的安全功能通過(guò)權(quán)限機(jī)制提供。權(quán)
12、限可以限制某個(gè)特定進(jìn)程的特定操作,也可以限制每個(gè)URI權(quán)限對(duì)特定數(shù)據(jù)段的訪(fǎng)問(wèn)。Android安全架構(gòu)的核心設(shè)計(jì)思想是,在默認(rèn)設(shè)置下,所有應(yīng)用都沒(méi)有權(quán)限對(duì)其他應(yīng)用、系統(tǒng)或用戶(hù)進(jìn)行較大影響的操作。這其中包括讀寫(xiě)用戶(hù)隱私數(shù)據(jù)(聯(lián)系人或電子郵件),讀寫(xiě)其他應(yīng)用文件,訪(fǎng)問(wèn)網(wǎng)絡(luò)或阻止設(shè)備待機(jī)等。安裝應(yīng)用時(shí),在檢查程序簽名提及的權(quán)限,且經(jīng)過(guò)用戶(hù)確認(rèn)后,軟件包安裝器會(huì)給予應(yīng)用權(quán)限。從用戶(hù)角度看,一款A(yù)ndroid應(yīng)用通常會(huì)要求如下的權(quán)限:撥打電話(huà)、發(fā)送短信或彩信、修改/刪除SD卡上的內(nèi)容、讀取聯(lián)系人的信息、讀取日程信的息,寫(xiě)入日程數(shù)據(jù)、讀取電話(huà)狀態(tài)或識(shí)別碼、精確的(基于GPS)地理位置、模糊的(基于網(wǎng)絡(luò)獲?。?/p>
13、地理位置、創(chuàng)建藍(lán)牙連接、對(duì)互聯(lián)網(wǎng)的完全訪(fǎng)問(wèn)、查看網(wǎng)絡(luò)狀態(tài),查看WiFi狀態(tài)、避免手機(jī)待機(jī)、修改系統(tǒng)全局設(shè)置、讀取同步設(shè)定、開(kāi)機(jī)自啟動(dòng)、重啟其他應(yīng)用、終止運(yùn)行中的應(yīng)用、設(shè)定偏好應(yīng)用、震動(dòng)控制、拍攝圖片等。一款應(yīng)用應(yīng)該根據(jù)自身提供的功能,要求合理的權(quán)限。用戶(hù)也可以分析一款應(yīng)用所需權(quán)限,從而簡(jiǎn)單判定這款應(yīng)用是否安全。如一款應(yīng)用是不帶廣告的單機(jī)版,也沒(méi)有任何附加的內(nèi)容需要下載,那么它要求訪(fǎng)問(wèn)網(wǎng)絡(luò)的權(quán)限就比較可疑。編輯本段系統(tǒng)組件Android開(kāi)發(fā)四大組件分別是:活動(dòng)(Activity):用于表現(xiàn)功能。服務(wù)(Service):后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn)。廣播接收器(BroadcastReceiver)
14、:用于接收廣播。內(nèi)容提供商(ContentProvider):支持在多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù)。ActivityAndroid中,Activity是所有程序的根本,所有程序的流程都運(yùn)行在Activity之中Activity可以算是開(kāi)發(fā)者遇到的最頻繁,也是Android當(dāng)中最基本的模塊之一。在Android的程序當(dāng)中,Activity一般代表手機(jī)屏幕的一屏。如果把手機(jī)比作一個(gè)瀏覽器,那么Activity就相當(dāng)于一個(gè)網(wǎng)頁(yè)。在Activity當(dāng)中可以添加一些Button、Checkbox等控件。可以看到Activity概念和網(wǎng)頁(yè)的概念相當(dāng)類(lèi)似。一般一個(gè)Android應(yīng)用是由多個(gè)Activ
15、ity組成的。這多個(gè)Activity之間可以進(jìn)行相互跳轉(zhuǎn),例如,按下一個(gè)Button按鈕后,可能會(huì)跳轉(zhuǎn)到其他的Activity。和網(wǎng)頁(yè)跳轉(zhuǎn)稍微有些不一樣的是,Activity之間的跳轉(zhuǎn)有可能返回值,例如,從ActivityA跳轉(zhuǎn)到ActivityB,那么當(dāng)ActivityB運(yùn)行結(jié)束的時(shí)候,有可能會(huì)給ActivityA一個(gè)返回值。這樣做在很多時(shí)候是相當(dāng)方便的。應(yīng)用程序框架開(kāi)發(fā)人員也可以完全訪(fǎng)問(wèn)核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用
16、機(jī)制也使用戶(hù)可以方便的替換程序組件。隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng),其中包括;豐富而又可擴(kuò)展的視圖(Views),可以用來(lái)構(gòu)建應(yīng)用程序,它包括列表(lists),網(wǎng)格(grids),文本框(textboxes),按鈕(buttons),甚至可嵌入的web瀏覽器。內(nèi)容提供器(ContentProviders)使得應(yīng)用程序可以訪(fǎng)問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)),或者共享它們自己的數(shù)據(jù)資源管理器(ResourceManager)提供非代碼資源的訪(fǎng)問(wèn),如本地字符串,圖形,和布局文件(layoutfiles)。通知管理器(NotificationManager)使得應(yīng)用程序可以在狀態(tài)欄
17、中顯示自定義的提示信息?;顒?dòng)管理器(ActivityManager)用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。2.2系統(tǒng)維護(hù)為了清除系統(tǒng)運(yùn)行中發(fā)生的故障和錯(cuò)誤,軟、硬件維護(hù)人員要對(duì)系統(tǒng)進(jìn)行必要的修改與完善;為了使系統(tǒng)適應(yīng)用戶(hù)環(huán)境的變化,滿(mǎn)足新提出的需要,也要對(duì)原系統(tǒng)做些局部的更新,這些工作稱(chēng)為系統(tǒng)維護(hù)。系統(tǒng)維護(hù)的任務(wù)是改正軟件系統(tǒng)在使用過(guò)程中發(fā)現(xiàn)的隱含錯(cuò)誤,擴(kuò)充在使用過(guò)程中用戶(hù)提出的新的功能及性能要求,其目的是維護(hù)軟件系統(tǒng)的“正常運(yùn)作”。這階段的文檔是軟件問(wèn)題報(bào)告和軟件修改報(bào)告,它記錄發(fā)現(xiàn)軟件錯(cuò)誤的情況以及修改軟件的過(guò)程。3.需求分析3.1系統(tǒng)功能分析小蜿雁齊小蜿雁齊毎曰舉退TAfM息
18、MA汀聞兌按檢禹議煩T我的彳倉(cāng)的訂單F喪規(guī)優(yōu)町界3.3系統(tǒng)非功能分析包括運(yùn)行環(huán)境、系統(tǒng)接口、數(shù)據(jù)要求、主要性能、質(zhì)量體系(可靠性、可用性、安全等)、其他需求等;運(yùn)行環(huán)境:MacOSX系統(tǒng)接口:專(zhuān)題頁(yè)面:一級(jí)頁(yè)面:專(zhuān)題:文章詳情:文章ID本周精選:let專(zhuān)題分類(lèi):最新:分類(lèi)ID&pageIndex=0&type=new其他:分類(lèi)ID發(fā)現(xiàn)頁(yè)面:輪播圖:POST請(qǐng)求參數(shù):NameValueActiongetAdList輪播圖詳情頁(yè)Html:POST請(qǐng)求參數(shù):NameValuetokenF4D845028303F9A466B67EFF9C8C6BD6輪播圖詳情頁(yè)評(píng)論:useridd6e0ce4c-44
19、c2-4b20-b07c-5cf9f21de3a6actiongetActivityactivityff1f65c4-01b7-4ccf-b4b2-bf81599010d2POST請(qǐng)求參數(shù):NameValueindex1actIdff1f65c4-01b7-4ccf-b4b2-bf81599010d2tokenF4D845028303F9A466B67EFF9C8C6BD6userIdd6e0ce4c-44c2-4b20-b07c-5cf9f21de3a6ActiongetComListpageSize5每日精選:POST請(qǐng)求參數(shù):NameValuetype薦actiongetJianOrJi
20、ngListcurrentPageIndex0pageSize4帖子詳情:POST請(qǐng)求參數(shù):NameValuebbsIdc6c89ef3-92c9-4bac-9381-6af00fad620euserIdd6e0ce4c-44c2-4b20-b07c-5cf9f21de3a6actiongetDetail評(píng)論詳情:POST請(qǐng)求參數(shù):NameValuebbsIdc6c89ef3-92c9-4bac-9381-6af00fad620eactiongetBbsListcurrentPageIndex0pageSize203.發(fā)布帖子:獲取帖子分類(lèi):POST請(qǐng)求參數(shù):NameValueactionge
21、tCircleType發(fā)布帖子:POST請(qǐng)求參數(shù):4.賬號(hào)信息:NameValuecontent大家好giftypeafe78aff-8c30-4beb-a7e2-95d0cbeea3c6tokenF4D845028303F9A466B67EFF9C8C6BD6useridd6e0ce4c-44c2-4b20-b07c-5cf9f21de3a6actionwriteBBSPOST請(qǐng)求參數(shù):5.注冊(cè):NameValuetype1actiongetListversion2POST請(qǐng)求參數(shù):NameValuemobilecc86mcc4606.登錄:POST請(qǐng)求參數(shù):NameValuetermina
22、lAndroid4系統(tǒng)設(shè)計(jì)mcc460CC86markethtxqjpc(極光推送)vc(驗(yàn)證碼)4173934.1設(shè)計(jì)指導(dǎo)思想和原則概要設(shè)計(jì)在系統(tǒng)需求分析階段,搞清楚了軟件“做什么”的問(wèn)題,形成了目標(biāo)系統(tǒng)的邏輯模型。現(xiàn)在我們所要做的就是要把軟件“做什么”的邏輯模型變換為“怎么做”的物理模型,即著手實(shí)現(xiàn)系統(tǒng)的需求。首先,我們需要描述的是系統(tǒng)的總的體系結(jié)構(gòu)。4.2詳細(xì)設(shè)計(jì)軟件設(shè)計(jì)原則根據(jù)用戶(hù)的體驗(yàn)方便快捷,系統(tǒng)分為四大模塊,其中專(zhuān)題模塊是為用戶(hù)提供每日的精選帖子,根據(jù)專(zhuān)題分類(lèi)推薦帖子,還有豐富的壁紙,無(wú)需用戶(hù)自己找,發(fā)現(xiàn)界面是由精選,圈子,訂閱三個(gè)小界面組成的,清晰明了的為用戶(hù)提供了自己想要的選
23、擇,商城界面則是方便用戶(hù)購(gòu)買(mǎi)自己喜歡的花,而我的界面顯示的則是自己的個(gè)人信息,用戶(hù)可以修改自己的頭像,查看自己帖子的點(diǎn)贊情況或者管理等一些功能。系統(tǒng)結(jié)構(gòu)設(shè)計(jì)系統(tǒng)的概要設(shè)計(jì)中最重要的就是系統(tǒng)的模塊化。模塊化是指解決一個(gè)復(fù)雜問(wèn)題時(shí)自項(xiàng)向下逐層把軟件系統(tǒng)劃分成若干個(gè)模塊的過(guò)程。每個(gè)模塊完成一個(gè)特定的功能,所有的模塊按某種方法組織起來(lái),成為一個(gè)整體,完成整個(gè)系統(tǒng)所要求的功能。將系統(tǒng)劃分為多個(gè)模塊是為了降低軟件系統(tǒng)的復(fù)雜性,提高可讀性、可維護(hù)性,但模塊的劃分不能是任意的,應(yīng)盡量保持其獨(dú)立性。也就是說(shuō),每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單,即盡量做到高內(nèi)聚低耦合,提高模
24、塊的獨(dú)立性,為設(shè)計(jì)高質(zhì)量的軟件結(jié)構(gòu)奠定基礎(chǔ)在系統(tǒng)的概要設(shè)計(jì)中采用結(jié)構(gòu)化設(shè)計(jì)以需求分析階段產(chǎn)生的數(shù)據(jù)流圖為基礎(chǔ),按一定的步驟映射成軟件結(jié)構(gòu)。首先將整個(gè)系統(tǒng)化分為幾個(gè)小問(wèn)題,小模塊然后,進(jìn)一步細(xì)分模塊,添加細(xì)節(jié)。4.3系統(tǒng)的詳細(xì)設(shè)計(jì)該項(xiàng)目采用MVP架構(gòu),該架構(gòu)是Android平臺(tái)MVC框架的升級(jí),MVC全稱(chēng)是Model-View-Controller,是模型(model)視圖(view)控制器(controller)的縮寫(xiě)。MVC是一種框架模式而非設(shè)計(jì)模式,GOF把MVC看作是3種設(shè)計(jì)模式:觀察者模式、策略模式與組合模式的合體,而核心是觀察者模式。簡(jiǎn)而言之,框架是大智慧,用來(lái)對(duì)軟件設(shè)計(jì)進(jìn)行分工;設(shè)
25、計(jì)模式是小技巧,對(duì)具體問(wèn)題提出解決方案,以提高代碼復(fù)用率,降低耦合度。MVP架構(gòu)是在MVC的基礎(chǔ)上進(jìn)行的升級(jí),MVP模式是MVC模式的一個(gè)演化版本,MVP全稱(chēng)Model-View-Presenter。目前MVP在Android應(yīng)用開(kāi)發(fā)中越來(lái)越重要了。在Android中,業(yè)務(wù)邏輯和數(shù)據(jù)存取是緊緊耦合的,很多缺乏經(jīng)驗(yàn)的開(kāi)發(fā)者很可能會(huì)將各種各樣的業(yè)務(wù)邏輯塞進(jìn)某個(gè)Activity、Fragment或者自定義View中,這樣會(huì)使得這些組件的單個(gè)類(lèi)型臃腫不堪。如果不將具體的業(yè)務(wù)邏輯抽離出來(lái),當(dāng)UI變化時(shí),你就需要去原來(lái)的View中抽離具體業(yè)務(wù)邏輯,這必然會(huì)很麻煩并且易出錯(cuò)。MVP模式會(huì)解除View與Mod
26、el的耦合,有效的降低View的復(fù)雜性。同時(shí)又帶來(lái)了良好的可擴(kuò)展性、可測(cè)試性,保證系統(tǒng)的整潔性和靈活性。MVP模式可以分離顯示層與邏輯層,它們之間通過(guò)接口進(jìn)行通信,降低耦合。理想化的MVP模式可以實(shí)現(xiàn)同一份邏輯代碼搭配不同的顯示界面,因?yàn)樗鼈冎g并不依賴(lài)與具體,而是依賴(lài)于抽象。這使得Presenter可以運(yùn)用于任何實(shí)現(xiàn)了View邏輯接口的UI,使之具有更廣泛的適用性,保證了靈活度。MVP模式的三個(gè)角色Presenter-交互中間人:Presenter主要作為溝通View與Model的橋梁,它從Model層檢索數(shù)據(jù)后,返回給View層,使得View與Model之間沒(méi)有耦合,也將業(yè)務(wù)邏輯從View
27、角色上抽離出來(lái)。View-用戶(hù)界面:View通常是指Activity、Fragment或者某個(gè)View控件,它含有一個(gè)Presenter成員變量。通常View需要實(shí)現(xiàn)一個(gè)邏輯接口,將View上的操作轉(zhuǎn)交給Presenter進(jìn)行實(shí)現(xiàn),最后,Presenter調(diào)用View邏輯接口將結(jié)果返回給View元素。Model-數(shù)據(jù)的存?。篗odel角色主要是提供數(shù)據(jù)的存取功能。Presenter需要通過(guò)Model層存儲(chǔ)、獲取數(shù)據(jù),Model就像一個(gè)數(shù)據(jù)倉(cāng)庫(kù)。更直白的說(shuō),Model是封裝了數(shù)據(jù)庫(kù)DAO或者網(wǎng)絡(luò)獲取數(shù)據(jù)的角色,或者兩種數(shù)據(jù)方式獲取的集合。項(xiàng)目中列表視圖采用第三方庫(kù)XRecyclerView,該框
28、架繼承自RecyclerView,在RecyclerView的基礎(chǔ)上進(jìn)行了封裝,提供了一系列的下拉刷新以及上拉加載更多的方法,并且在其中提供了默認(rèn)的實(shí)現(xiàn),非常簡(jiǎn)單易于使用;網(wǎng)絡(luò)請(qǐng)求采用谷歌官方出品的網(wǎng)絡(luò)請(qǐng)求框架Volley,該框架具有自動(dòng)調(diào)度網(wǎng)絡(luò)請(qǐng)求、支持多個(gè)并發(fā)的網(wǎng)絡(luò)連接、通過(guò)使用標(biāo)準(zhǔn)的HTTP緩存機(jī)制保持磁盤(pán)和內(nèi)存響應(yīng)的一致、支持請(qǐng)求優(yōu)先級(jí)、支持取消請(qǐng)求的強(qiáng)大API,可以取消單個(gè)請(qǐng)求或多個(gè)、易于定制、便于正確的更新UI和獲取數(shù)據(jù)、包含調(diào)試和追蹤工具的特點(diǎn);數(shù)據(jù)解析采用的是谷歌官方出品的數(shù)據(jù)解析框架Gson,該框架可以直接把請(qǐng)求回來(lái)的JSON數(shù)據(jù)解析成實(shí)體類(lèi),配合AndroidStudio中
29、的GsonFormat插件可以達(dá)到快速開(kāi)發(fā)的效果;5系統(tǒng)實(shí)現(xiàn)5.1系統(tǒng)物理結(jié)構(gòu)77773F1瞬Android0丨幸獲取單一實(shí)例瞬Android0丨幸獲取單一實(shí)例嚴(yán)tfappDmanifests口尸ElactivityEadapter卜匡applicationEbenIIcallback卜EJconfigEcontractfragment卜E3modltLpresenter|Qutilswidget(androidTe$1jcom.serenade.huatianxlaoqj(test)KQresWCradleScripts5.2主要類(lèi)的實(shí)現(xiàn)AppManager.java:采用單例模式來(lái)構(gòu)建一個(gè)
30、全局的AppManager,該類(lèi)用來(lái)存儲(chǔ)已經(jīng)實(shí)例化的Activity對(duì)象,模擬了Android中的Activity棧結(jié)構(gòu),提供了一系列管理Activity的方法,如退出所有Activity等方法。publicclassAppManagerprivatestaticStackactivities;/*構(gòu)造方法私有化*/privateAppManager()/*實(shí)例化單例的靜態(tài)內(nèi)部類(lèi)*/privatestaticclassAppManagerHolderpublicstaticfinalAppManagerinstanee=newAppManager();/*return單一實(shí)例*/publics
31、taticAppManagergetAppManager()returnAppManagerHolder.instance;/結(jié)束所有Activity*/publicvoidfinishAllActivity()for(inti=0;iactivities.size();i+)if(null!=activities.get(i)activities.get(i).finish();*添加Activity到堆棧*paramactivity*/publicvoidaddActivity(Activityactivity)if(activities=null)activities=newStack(
32、);activities.add(activity);/*結(jié)束指定的Activity*paramactivity*/publicvoidfinishActivity(Activityactivity)if(activity!=null)activities.remove(activity);activity.finish();activity=null;/*結(jié)束當(dāng)前Activity(堆棧中最后一個(gè)壓入的)*/publicvoidfinishActivity()Activityactivity=activities.lastElement();finishActivity(activity);a
33、ctivities.clear();/*獲取棧頂Activity*/publicActivitygetTopActivity()Activityactivity=activities.lastElement();returnactivity;/*/*完成登錄/*/publicvoidfinishLogin()/for(inti=0;i=Build.VERSION_CODES.LOLLIPOP)getWindow().setStatusBarColor(Color.parseColor(setStatusBarColor();super.onCreate(savedInstanceState);
34、/設(shè)置布局setContentView(setLayout();/添加Activity到管理堆棧AppManager.getAppManager().addActivity(this);/綁定控件initView();/設(shè)置UIonPrepare();/*設(shè)置布局*return布局資源id*/publicabstractintsetLayout();/*初始化控件*/publicabstractvoidinitView();publicStringsetStatusBarColor()return#303F9F;/*基本操作*/publicabstractvoidonPrepare();/*是
35、否顯示ActionBar*returntrue顯示false不顯示*/publicbooleanisActionBarEnabled()returntrue;/publicvoidrequestRuntimePermission(Stringpermissions,PermissionListenerlistener)/ActivitytopActivity=AppManager.getAppManager().getTopActivity();/if(topActivity=null)/return;/mListener=listener;/ListpermissionList=newArr
36、ayList();/for(Stringpermission:permissions)/if(ContextCompat.checkSelfPermission(topActivity,permission)!=PackageManager.PERMISSION_GRANTED)/permissionList.add(permission);/if(!permissionList.isEmpty()/ActivityCompat.requestPermissions(topActivity,permissionList.toArray(newStringpermissionList.size(
37、),1);/else/mListener.onGranted();/deniedPermissions.add(permission);if(deniedPermissions.isEmpty()mListener.onGranted();elsemListener.onDenied(deniedPermissions);break;default:/Override/publicvoidonRequestPermissionsResult(intrequestCode,NonNullStringpermissions,NonNullintgrantResults)/super.onReque
38、stPermissionsResult(requestCode,permissions,grantResults);/switch(requestCode)/case1:if(grantResults.length0)ListdeniedPermissions=newArrayList();for(inti=0;igrantResults.length;i+)intgrantResult=grantResultsi;Stringpermission=permissionsi;!=!=if(grantResultPackageManager.PERMISSION_GRANTED)/break;/
39、OverrideprotectedvoidonDestroy()super.onDestroy();/從管理堆棧移除ActivityAppManager.getAppManager().finishActivity(this);publicvoidshowToast(Stringcontent)Toast.makeText(this,content,Toast.LENGTH_SHORT).show();BaseFragment.javapublicabstractclassBaseFragmentextendsFragmentimplementsBaseContract.Viewprotect
40、edTmPresenter;NullableOverridepublicViewonCreateView(LayoutInflaterinflater,NullableViewGroupcontainer,NullableBundlesavedInstanceState)Viewview=inflater.inflate(setLayout(),container,false);mPresenter=createPresenter();mPresenter.attachView(this);initView(view);onPrepare();returnview;protectedabstr
41、actvoidinitView(Viewview);OverridepublicvoidonDestroyView()super.onDestroyView();mPresenter.detachView();publicabstractTcreatePresenter();publicabstractvoidonPrepare();publicabstractintsetLayout();publicvoidshowToast(Stringtext)Toast.makeText(getActivity(),+text,Toast.LENGTH_SHORT).show();BasePresenter.javapublicabstractclassBasePresenterimplementsBaseContract.PresenterprotectedTmView;/View接口類(lèi)型的弱引用protectedVmModel;/Model接口publicBasePresenter()mModel=createModel();publicabstractVcreateModel();publicvoidattachView(Tview)this.mView=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《皮膚性病學(xué)濕疹》課件
- 行政后勤財(cái)務(wù)報(bào)銷(xiāo)審核
- 母親節(jié) 營(yíng)銷(xiāo)新視角
- 體育行業(yè)話(huà)務(wù)員工作總結(jié)
- 餐飲行業(yè)服務(wù)員的服務(wù)宗旨
- 體育場(chǎng)館的衛(wèi)生清潔
- 2023-2024年企業(yè)主要負(fù)責(zé)人安全培訓(xùn)考試題考題
- 2023-2024安全培訓(xùn)考試題及答案(新)
- 函授專(zhuān)科畢業(yè)自我鑒定15篇
- 課題研究報(bào)告
- 養(yǎng)老服務(wù)中心裝飾裝修工程施工方案
- 落地式腳手架監(jiān)理實(shí)施細(xì)則
- 上海市金山區(qū)2022-2023學(xué)年中考一模英語(yǔ)試題含答案
- 節(jié)水灌溉供水工程初步設(shè)計(jì)報(bào)告
- 【期末試題】河西區(qū)2018-2019學(xué)年度第一學(xué)期六年級(jí)數(shù)學(xué)期末試題
- 2022年總經(jīng)理年會(huì)發(fā)言稿致辭二
- 警綜平臺(tái)運(yùn)行管理制度
- 立法學(xué)完整版教學(xué)課件全套ppt教程
- 簡(jiǎn)約中國(guó)風(fēng)水墨山水工作總結(jié)通用PPT模板
- 礦山測(cè)量課程設(shè)計(jì)
- 藥廠生產(chǎn)車(chē)間現(xiàn)場(chǎng)管理-PPT課件
評(píng)論
0/150
提交評(píng)論