




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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.1研究背景(合并1.2)春天里來(lái)百花香,怎么會(huì)不讓人沉醉呢?美麗的花自然好看,但人的創(chuàng)造力更是無(wú)邊,花藝賦予了鮮花更多的話語(yǔ)表達(dá),想不想接觸甚至做出更多美好的花藝作品呢?花田小憩不僅僅是有專(zhuān)業(yè)的花藝教學(xué)內(nèi)容,它還是一個(gè)活躍的百萬(wàn)花藝愛(ài)好者社區(qū)。在這里,你可以看到各式各樣的話題討論,不僅限于花藝,還延伸至家居、植物、雜物等生活美學(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è)小而美的精致生活。希望能讓用戶在繁瑣的生活之中,享受一種靜雅恬淡的生活之美,制造一份專(zhuān)屬的美學(xué)生活態(tài)度。 1.2研究開(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ā)的必要性。1.3 主要研究?jī)?nèi)容. (1)技術(shù)路線:采用什么技術(shù)、方法、環(huán)境與工具;(2)系統(tǒng)特征
3、:解決的關(guān)鍵問(wèn)題(解決什么問(wèn)題)、達(dá)到什么目標(biāo),實(shí)現(xiàn)什么功能。 1.4本文的組織結(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.1 Android技術(shù)Android是一種以l i n u x為基
4、礎(chǔ)的開(kāi)放源代碼操作系統(tǒng),主要使用于便攜設(shè)備。目前尚未有統(tǒng)一中文名稱(chēng),中國(guó)大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由Andy Rubin開(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)果公司的i o s以及RIM的Blackberry OS。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)一樣,采用
5、了分層的架構(gòu)。android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和l i n u x核心層。 Android是以Linux為核心的手機(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)行編程(如:
6、python、l u a、t cl、p h p等等),還有其他諸如:QT(qt for android)、Mono(mono for android)等一些著名編程框架也開(kāi)始支持Android編程,甚至通過(guò)Mon o Droid,開(kāi)發(fā)者還可以使用C#作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序。另外,谷歌還在2009年特別發(fā)布了針對(duì)初學(xué)者的Android Simple語(yǔ)言,該語(yǔ)言類(lèi)似Basic語(yǔ)言。而在網(wǎng)頁(yè)編程語(yǔ)言方面,JavaScript,HTML5等等都已經(jīng)支持Android開(kāi)發(fā)。2.1.2 Android應(yīng)用程序早期的Android應(yīng)用程序開(kāi)發(fā),通常通過(guò)Android SDK(Android軟件
7、開(kāi)發(fā)包)下使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,但通過(guò)不同的軟件開(kāi)發(fā)包,則使用的編程語(yǔ)言也不同。 例如開(kāi)發(fā)者可以通過(guò)Android NDK(Android Native開(kāi)發(fā)包)使用C語(yǔ)言或者C+語(yǔ)言來(lái)編程語(yǔ)言開(kāi)發(fā)應(yīng)用程序。同時(shí)谷歌還推出了適合初學(xué)者編程使用的Simple語(yǔ)言,該語(yǔ)言類(lèi)似微軟公司的Visual Basic語(yǔ)言。此外,谷歌公司還推出了Google App Inventor開(kāi)發(fā)工具,該開(kāi)發(fā)工具可以快速地構(gòu)建應(yīng)用程序,方便新手開(kāi)發(fā)者。2.1.3 JAVA開(kāi)發(fā)方面Android支持使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用
8、程序,而Android的Java開(kāi)發(fā)方面從接口到功能,都有層出不窮的變化??紤]到Java虛擬機(jī)的效率和資源占用,谷歌重新設(shè)計(jì)了Android的Java,以便能提高效率和減少資源占用,因而與J2ME等不同。2.1.4 C/C+開(kāi)發(fā)方面早期的Android開(kāi)發(fā)只支持Java作為編程語(yǔ)言開(kāi)發(fā)應(yīng)用程序,因而使得其他語(yǔ)言開(kāi)發(fā)者只能望而卻步。2010年4月,谷歌正式對(duì)開(kāi)發(fā)者發(fā)布了Android NDK,NDK允許開(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)前版本的NDK在功能上還有
9、很多局限性:NDK并沒(méi)有提供對(duì)應(yīng)用程序生命周期的維護(hù);NDK也不提供對(duì)Android系統(tǒng)中大量系統(tǒng)事件的支持;對(duì)于作為應(yīng)用程序交互接口的UI API,當(dāng)前版本的NDK中也沒(méi)有提供。但是相對(duì)于初版的NDK,現(xiàn)在的NDK已經(jīng)進(jìn)行了許多重大的功能改進(jìn)。 由此可見(jiàn),NDK仍然需要完善和發(fā)展,相信未來(lái)隨著NDK的發(fā)展,NDK可以做得更多更好。2.1.5 硬件抽象層Android 的 HAL(硬件抽象層)是能以封閉源碼形式提供硬件驅(qū)動(dòng)模塊。HAL 的目的是為了把 Android framework 與 L
10、inux kernel 隔開(kāi),讓 Android 不至過(guò)度依賴(lài) Linux kernel,以達(dá)成 kernel independent 的概念,也讓 Android framework 的開(kāi)發(fā)能在不考慮驅(qū)動(dòng)程序?qū)崿F(xiàn)的前提下進(jìn)行發(fā)展。 HAL stub 是一種代理人(proxy)的概念,stub 是以 *.so 檔的形式存在。Stub向HAL“提供”操作函數(shù)(operations),
11、并由 Android runtime 向 HAL 取得stub的operations,再callback這些操作函數(shù)。HAL 里包含了許多的 stub(代理人)。Runtime 只要說(shuō)明“類(lèi)型”,即moduleID,就可以取得操作函數(shù)。2.1.6 系統(tǒng)內(nèi)核Android 是運(yùn)行于 Linux kernel之上,但并不是GNU/Linux。因?yàn)樵谝话鉍NU/Linux 里支持的功能,Android 大都沒(méi)有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、
12、Pango及Glibc等都被移除掉了。Android又以bionic 取代Glibc、以Skia 取代Cairo、再以 opencore 取代FFmpeg 等等。Android 為了達(dá)到商業(yè)應(yīng)用,必須移除被GNU GPL 授權(quán)證所約束的部份,例如Android將驅(qū)動(dòng)程序移到 userspace,使得Linux driver 與 Linux kernel徹底分開(kāi)。bionic/libc/kernel/ 并非標(biāo)準(zhǔn)的kernel header files。And
13、roid 的 kernel header是利用工具由 Linux kernel header 所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)構(gòu)與宏。2.1.7 安全權(quán)限機(jī)制Android本身是一個(gè)權(quán)限分立的操作系統(tǒng)。在這類(lèi)操作系統(tǒng)中,每個(gè)應(yīng)用都以唯一的一個(gè)系統(tǒng)識(shí)別身份運(yùn)行(Linux用戶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)限可以限制某個(gè)特定進(jìn)程的特定操作,也可以限制每個(gè)URI
14、權(quán)限對(duì)特定數(shù)據(jù)段的訪問(wèn)。 Android安全架構(gòu)的核心設(shè)計(jì)思想是,在默認(rèn)設(shè)置下,所有應(yīng)用都沒(méi)有權(quán)限對(duì)其他應(yīng)用、系統(tǒng)或用戶進(jìn)行較大影響的操作。這其中包括讀寫(xiě)用戶隱私數(shù)據(jù)(聯(lián)系人或電子郵件),讀寫(xiě)其他應(yīng)用文件,訪問(wèn)網(wǎng)絡(luò)或阻止設(shè)備待機(jī)等。 安裝應(yīng)用時(shí),在檢查程序簽名提及的權(quán)限,且經(jīng)過(guò)用戶確認(rèn)后,軟件包安裝器會(huì)給予應(yīng)用權(quán)限。從用戶角度看,一款A(yù)ndroid應(yīng)用通常會(huì)要求如下的權(quán)限: 撥打電話、發(fā)送短信或彩信、修改/刪除SD卡上的內(nèi)容、讀取聯(lián)系人的信息、讀取日程信的息,寫(xiě)入日程數(shù)據(jù)、讀取電話狀態(tài)或識(shí)別碼、精確的(基
15、于GPS)地理位置、模糊的(基于網(wǎng)絡(luò)獲?。┑乩砦恢谩?chuàng)建藍(lán)牙連接、對(duì)互聯(lián)網(wǎ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)限。用戶也可以分析一款應(yīng)用所需權(quán)限,從而簡(jiǎn)單判定這款應(yīng)用是否安全。如一款應(yīng)用是不帶廣告的單機(jī)版,也沒(méi)有任何附加的內(nèi)容需要下載,那么它要求訪問(wèn)網(wǎng)絡(luò)的權(quán)限就比較可疑。 編輯本段系統(tǒng)組件 Android開(kāi)發(fā)四大組件分別是:活動(dòng)(Activity):用于表現(xiàn)功能。
16、服務(wù)(Service):后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn)。廣播接收器(BroadcastReceiver):用于接收廣播。內(nèi)容提供商(Content Provider):支持在多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù)。2.1.8 ActivityAndroid 中,Activity 是所有程序的根本,所有程序的流程都運(yùn)行在Activity 之中,Activity可以算是開(kāi)發(fā)者遇到的最頻繁,也是Android 當(dāng)中最基本的模塊之一。在Android的程序當(dāng)中,Activity 一般代表手機(jī)屏幕的一屏。如果把手機(jī)比作一個(gè)瀏覽器,那么Activi
17、ty就相當(dāng)于一個(gè)網(wǎng)頁(yè)。在Activity 當(dāng)中可以添加一些Button、Check box 等控件??梢钥吹紸ctivity 概念和網(wǎng)頁(yè)的概念相當(dāng)類(lèi)似。 一般一個(gè)Android 應(yīng)用是由多個(gè)Activity 組成的。這多個(gè)Activity 之間可以進(jìn)行相互跳轉(zhuǎn),例如,按下一個(gè)Button 按鈕后,可能會(huì)跳轉(zhuǎn)到其他的Activity。和網(wǎng)頁(yè)跳轉(zhuǎn)稍微有些不一樣的是,Activity 之間的跳轉(zhuǎn)有可能返回值,例如,從Activity A 跳轉(zhuǎn)到Activity
18、;B,那么當(dāng)Activity B 運(yùn)行結(jié)束的時(shí)候,有可能會(huì)給Activity A 一個(gè)返回值。這樣做在很多時(shí)候是相當(dāng)方便的。 2.1.9 應(yīng)用程序框架開(kāi)發(fā)人員也可以完全訪問(wèn)核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;1. 豐富而又可擴(kuò)展的視圖(Views),可以用來(lái)構(gòu)建應(yīng)用程序, 它包括列表(li
19、sts),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。2.內(nèi)容提供器(Content Providers)使得應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)), 或者共享它們自己的數(shù)據(jù)3.資源管理器(Resource Manager)提供 非代碼資源的訪問(wèn),如本地字符串,圖形,和布局文件( layout files )。4. 通知管理器 (Notification Manager) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。5. 活動(dòng)管理器( Activity Manager) 用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退
20、功能。2.2 系統(tǒng)維護(hù)為了清除系統(tǒng)運(yùn)行中發(fā)生的故障和錯(cuò)誤,軟、硬件維護(hù)人員要對(duì)系統(tǒng)進(jìn)行必要的修改與完善;為了使系統(tǒng)適應(yīng)用戶環(huán)境的變化,滿足新提出的需要,也要對(duì)原系統(tǒng)做些局部的更新,這些工作稱(chēng)為系統(tǒng)維護(hù)。 系統(tǒng)維護(hù)的任務(wù)是改正軟件系統(tǒng)在使用過(guò)程中發(fā)現(xiàn)的隱含錯(cuò)誤,擴(kuò)充在使用過(guò)程中用戶提出的新的功能及性能要求,其目的是維護(hù)軟件系統(tǒng)的“正常運(yùn)作”。這階段的文檔是軟件問(wèn)題報(bào)告和軟件修改報(bào)告,它記錄發(fā)現(xiàn)軟件錯(cuò)誤的情況以及修改軟件的過(guò)程。3.需求分析3.1系統(tǒng)功能分析 3.3系統(tǒng)非功能分析包括運(yùn)行環(huán)境、系統(tǒng)接口、數(shù)據(jù)要求、主要性能、質(zhì)量體系(可靠性、可用性、安全等)、其他需求等;運(yùn)行環(huán)境:Mac OS X
21、EI Captian 10.11.6系統(tǒng)接口: 1.專(zhuān)題頁(yè)面:一級(jí)頁(yè)面: 專(zhuān)題: 文章詳情:本周精選:專(zhuān)題分類(lèi):最新:其他:2. 發(fā)現(xiàn)頁(yè)面:輪播圖:POST請(qǐng)求參數(shù):NameValueActiongetAdList輪播圖詳情頁(yè)Html:POST請(qǐng)求參數(shù):NameValuetokenF4D845028303F9A466B67EFF9C8C6BD6userIdd6e0ce4c-44c2-4b20-b07c-5cf9f21de3a6actiongetActivityactivityff1f65c4-01b7-4ccf-b4b2-bf81599010d2輪播圖詳情頁(yè)評(píng)論:POST請(qǐng)求參數(shù):NameVa
22、lueindex1actIdff1f65c4-01b7-4ccf-b4b2-bf81599010d2tokenF4D845028303F9A466B67EFF9C8C6BD6userIdd6e0ce4c-44c2-4b20-b07c-5cf9f21de3a6ActiongetComListpageSize5每日精選:POST請(qǐng)求參數(shù):NameValuetype薦actiongetJianOrJingListcurrentPageIndex0pageSize4帖子詳情:POST請(qǐng)求參數(shù):NameValuebbsIdc6c89ef3-92c9-4bac-9381-6af00fad620euserI
23、dd6e0ce4c-44c2-4b20-b07c-5cf9f21de3a6actiongetDetail評(píng)論詳情:POST請(qǐng)求參數(shù):NameValuebbsIdc6c89ef3-92c9-4bac-9381-6af00fad620eactiongetBbsListcurrentPageIndex0pageSize203. 發(fā)布帖子:獲取帖子分類(lèi):POST請(qǐng)求參數(shù):NameValueactiongetCircleType發(fā)布帖子:POST請(qǐng)求參數(shù):NameValuecontent大家好fileTypesgiftypeafe78aff-8c30-4beb-a7e2-95d0cbeea3c6toke
24、nF4D845028303F9A466B67EFF9C8C6BD6userIdd6e0ce4c-44c2-4b20-b07c-5cf9f21de3a6actionwriteBBS4. 賬號(hào)信息:POST請(qǐng)求參數(shù):NameValuetype1actiongetListversion25. 注冊(cè):POST請(qǐng)求參數(shù):NameValuemobilc86mcc4606. 登錄:POST請(qǐng)求參數(shù):NameValueterminalAndroidmcc460cc86markethtxqjpc(極光推送)vc(驗(yàn)證碼)4173934.系統(tǒng)設(shè)計(jì) 4.1 設(shè)計(jì)指導(dǎo)思想和原則4.1.1 概
25、要設(shè)計(jì)在系統(tǒng)需求分析階段,搞清楚了軟件“做什么”的問(wèn)題,形成了目標(biāo)系統(tǒng)的邏輯模型?,F(xiàn)在我們所要做的就是要把軟件“做什么”的邏輯模型變換為“怎么做”的物理模型,即著手實(shí)現(xiàn)系統(tǒng)的需求。首先,我們需要描述的是系統(tǒng)的總的體系結(jié)構(gòu)。4.2 詳細(xì)設(shè)計(jì)4.2.1軟件設(shè)計(jì)原則 根據(jù)用戶的體驗(yàn)方便快捷,系統(tǒng)分為四大模塊,其中專(zhuān)題模塊是為用戶提供每日的精選帖子,根據(jù)專(zhuān)題分類(lèi)推薦帖子,還有豐富的壁紙,無(wú)需用戶自己找, 發(fā)現(xiàn)界面是由精選,圈子,訂閱三個(gè)小界面組成的,清晰明了的為用戶提供了自己想要的選擇,商城界面則是方便用戶購(gòu)買(mǎi)自己喜歡的花,而我的界面顯示的則是自己的個(gè)人信息,用戶可以修改自己的頭像,查看自己帖子的點(diǎn)贊
26、情況或者管理等一些功能。4.2.3系統(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)聚低耦合,提高模塊的獨(dú)立性,為設(shè)計(jì)高質(zhì)量的軟件結(jié)構(gòu)奠定基礎(chǔ)。在系統(tǒng)的概要設(shè)計(jì)中采用結(jié)構(gòu)化設(shè)計(jì)以需求分析階段產(chǎn)生的數(shù)據(jù)流圖為基礎(chǔ)
27、,按一定的步驟映射成軟件結(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è)計(jì)模式是小技巧,對(duì)具體問(wèn)題提出解決方案,以提高代碼復(fù)用率,降低耦合度。MVP架構(gòu)是在MVC的基礎(chǔ)
28、上進(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與Model的耦合,有效的降低View的復(fù)雜性。同時(shí)又帶來(lái)了良好的可擴(kuò)展性、可測(cè)試性,保證系統(tǒng)的整潔性和
29、靈活性。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è)角色(1)Presenter 交互中間人:Presenter主要作為溝通View與Model的橋梁,它從Model層檢索數(shù)據(jù)后,返回給View層,使得View與Model之間沒(méi)有耦合,也將業(yè)務(wù)邏輯從View角色上抽離出來(lái)。(2)View 用戶界面:View通常是指Activity、Fragmen
30、t或者某個(gè)View控件,它含有一個(gè)Presenter成員變量。通常View需要實(shí)現(xiàn)一個(gè)邏輯接口,將View上的操作轉(zhuǎn)交給Presenter進(jìn)行實(shí)現(xiàn),最后,Presenter 調(diào)用View邏輯接口將結(jié)果返回給View元素。(3)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,該框架繼承自RecyclerView,在RecyclerView的基礎(chǔ)上進(jìn)行
31、了封裝,提供了一系列的下拉刷新以及上拉加載更多的方法,并且在其中提供了默認(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),配合Android Studio中的GsonFormat插件可以達(dá)到快速開(kāi)發(fā)的效果;5.系統(tǒng)實(shí)現(xiàn) 5.1
32、系統(tǒng)物理結(jié)構(gòu) 5.2主要類(lèi)的實(shí)現(xiàn)AppManager.java:采用單例模式來(lái)構(gòu)建一個(gè)全局的AppManager,該類(lèi)用來(lái)存儲(chǔ)已經(jīng)實(shí)例化的Activity對(duì)象,模擬了Android中的Activity棧結(jié)構(gòu),提供了一系列管理Activity的方法,如退出所有Activity等方法。public class AppManager private static Stack<Activity> activities; /* * 構(gòu)造方法私有化 */ private AppManager() /* * 實(shí)例化單例的靜態(tài)內(nèi)部類(lèi) */ private static class AppManag
33、erHolder public static final AppManager instance = new AppManager(); /* * 獲取單一實(shí)例 * * return 單一實(shí)例 */ public static AppManager getAppManager() return AppManagerHolder.instance; /* * 添加Activity到堆棧 * * param activity */ public void addActivity(Activity activity) if (activities = null) activities = new S
34、tack<>(); activities.add(activity); /* * 結(jié)束指定的Activity * * param activity */ public void finishActivity(Activity activity) if (activity != null) activities.remove(activity); activity.finish(); activity = null; /* * 結(jié)束當(dāng)前Activity(堆棧中最后一個(gè)壓入的) */ public void finishActivity() Activity activity = ac
35、tivities.lastElement(); finishActivity(activity); /* * 結(jié)束所有Activity */ public void finishAllActivity() for (int i = 0; i < activities.size(); i+) if (null != activities.get(i) activities.get(i).finish(); activities.clear(); /* * 獲取棧頂Activity */ public Activity getTopActivity() Activity activity =
36、 activities.lastElement(); return activity; / /*/ * 完成登錄/ */ public void finishLogin() / for (int i = 0; i < activities.size(); i+) / Activity activity = activities.get(i);/ if (activity instanceof LoginActivity/ | activity instanceof WelcomeActivity/ | activity instanceof VerifyActivity/ | activ
37、ity instanceof RegisterActivity)/ finishActivity(activity);/ / BaseActivity.javapublic abstract class BaseActivity extends AppCompatActivity / private static PermissionListener mListener; Override protected void onCreate(Nullable Bundle savedInstanceState) if (!isActionBarEnabled() supportRequestWin
38、dowFeature(Window.FEATURE_NO_TITLE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) getWindow().setStatusBarColor(Color.parseColor(setStatusBarColor(); super.onCreate(savedInstanceState); /設(shè)置布局 setContentView(setLayout(); /添加Activity到管理堆棧 AppManager.getAppManager().addActivity(this);
39、/綁定控件 initView(); /設(shè)置UI onPrepare(); /* * 設(shè)置布局 * * return 布局資源id */ public abstract int setLayout(); /* * 初始化控件 */ public abstract void initView(); public String setStatusBarColor() return "#303F9F" /* * 基本操作 */ public abstract void onPrepare(); /* * 是否顯示ActionBar * * return true 顯示 false
40、不顯示 */ public boolean isActionBarEnabled() return true; / public void requestRuntimePermission(String permissions, PermissionListener listener) / Activity topActivity = AppManager.getAppManager().getTopActivity();/ if (topActivity = null)/ return;/ mListener = listener;/ List<String> permissio
41、nList = new ArrayList<>();/ for (String permission : permissions) / if (ContextCompat.checkSelfPermission(topActivity, permission) != PackageManager.PERMISSION_GRANTED) / permissionList.add(permission);/ / / if (!permissionList.isEmpty() / ActivityCompat.requestPermissions(topActivity, permiss
42、ionList.toArray(new StringpermissionList.size(), 1);/ else / mListener.onGranted();/ / / Override/ public void onRequestPermissionsResult(int requestCode, NonNull String permissions, NonNull int grantResults) / super.onRequestPermissionsResult(requestCode, permissions, grantResults);/ switch (reques
43、tCode) / case 1:/ if (grantResults.length > 0) / List<String> deniedPermissions = new ArrayList<>();/ for (int i = 0; i < grantResults.length; i+) / int grantResult = grantResultsi;/ String permission = permissionsi;/ if (grantResult != PackageManager.PERMISSION_GRANTED) / deniedPe
44、rmissions.add(permission);/ / / if (deniedPermissions.isEmpty() / mListener.onGranted();/ else / mListener.onDenied(deniedPermissions);/ / / break;/ default:/ break;/ / Override protected void onDestroy() super.onDestroy(); /從管理堆棧移除Activity AppManager.getAppManager().finishActivity(this); public voi
45、d showToast(String content) Toast.makeText(this, content, Toast.LENGTH_SHORT).show(); BaseFragment.javapublic abstract class BaseFragment<T extends BasePresenter> extends Fragment implements BaseContract.View protected T mPresenter; Nullable Override public View onCreateView(LayoutInflater inf
46、later, Nullable ViewGroup container, Nullable Bundle savedInstanceState) View view = inflater.inflate(setLayout(), container,false); mPresenter = createPresenter(); mPresenter.attachView(this); initView(view); onPrepare(); return view; protected abstract void initView(View view); Override public voi
47、d onDestroyView() super.onDestroyView(); mPresenter.detachView(); public abstract T createPresenter(); public abstract void onPrepare(); public abstract int setLayout(); public void showToast(String text) Toast.makeText(getActivity(), ""+text, Toast.LENGTH_SHORT).show(); BasePresenter.javapublic abstract class BasePresenter<V extends BaseModel, T extends BaseFragment> implements BaseContract.Presenter protected T mView;/View接口類(lèi)型的弱引用 protected V mModel;/Model接口 public BasePresenter() mModel = createModel(); public abst
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 砌體工程冬期施工合同管理措施
- 樓地面(采暖)施工方案
- 個(gè)人全部財(cái)產(chǎn)贈(zèng)與合同書(shū)9篇
- 員工工作合同5篇
- 鼓風(fēng)機(jī)租賃合同
- 2025年出國(guó)勞務(wù)標(biāo)準(zhǔn)合同7篇
- 二手車(chē)買(mǎi)賣(mài)合同集錦15篇-買(mǎi)賣(mài)合同5篇
- 外匯金屬合同
- 標(biāo)準(zhǔn)大型工程合同模板5篇
- 留學(xué)合作協(xié)議留學(xué)合同書(shū)大全二零二五年
- 承包餐館協(xié)議書(shū)模板
- 危險(xiǎn)化學(xué)品事故應(yīng)急預(yù)案
- 第三方房屋抵押擔(dān)保合同
- 2025年山東建筑安全員《B證》考試題庫(kù)及答案
- 2025屆上海市黃浦區(qū)高三下學(xué)期二模政治試題(原卷版+解析版)
- 浙江國(guó)企招聘2025寧波樞智交通科技有限公司招聘21人筆試參考題庫(kù)附帶答案詳解
- 校園零星維修協(xié)議書(shū)
- “燕園元培杯”2023-2024學(xué)年全國(guó)中學(xué)生地球科學(xué)奧林匹克競(jìng)賽決賽試題詳解
- 消防隊(duì)伍廉潔警示教育
- 總體概述:施工組織總體設(shè)想、方案針對(duì)性及施工段劃分
- 涉密和非涉密計(jì)算機(jī)保密管理制度
評(píng)論
0/150
提交評(píng)論