2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  Android在線音樂播放器設(shè)計(jì)與實(shí)現(xiàn)</p><p>  摘要:移動互聯(lián)網(wǎng)發(fā)展瞬息萬變,以往的隨身聽、MP3等千篇一律的播放設(shè)備已經(jīng)越來越難以滿足人們多樣化的聽音樂需求了,而市面上的音樂播放器APP卻深陷商業(yè)的漩渦,盈利和用戶體驗(yàn)總是難以成正比,看似琳瑯滿目的音樂應(yīng)用卻沒有幾款真正讓用戶喜歡的。在這樣的背景下,課題基于Android開源平臺,使用Java語言開發(fā),采用Android Stu

2、dio + Gradle工具構(gòu)建,并依靠OkHttp+Gson提供網(wǎng)絡(luò)框架,開發(fā)了一款A(yù)ndroid在線音樂播放器。播放器支持播放在線音樂,上一曲、下一曲,切換播放模式,支持歌詞與專輯封面顯示,支持搜索、下載在線歌曲等基本功能,并擴(kuò)展實(shí)現(xiàn)了夜間模式,定時(shí)關(guān)閉等功能,致力于給用戶提供更舒心的聽歌體驗(yàn)。論文給出詳細(xì)的框架設(shè)計(jì),系統(tǒng)流程設(shè)計(jì),部分設(shè)計(jì)圖及主要功能運(yùn)行流程圖,并對開發(fā)中遇到的主要問題進(jìn)行了詳細(xì)討論,如通過Activity和Ser

3、vice通信實(shí)現(xiàn)后臺播放。經(jīng)過系統(tǒng)測試,系統(tǒng)實(shí)現(xiàn)了基本功能和擴(kuò)展功能,性能達(dá)到了一定的指標(biāo)。</p><p>  關(guān)鍵詞:在線音樂;播放器;定時(shí)關(guān)閉;Gradle;OkHttp</p><p>  Design and Implementation of Android-based Online Music Player</p><p>  Abstract: Th

4、e development of mobile Internet is constantly changing, the previous Walkman, MP3 player and other devices have been stereotyped increasingly difficult to meet people's demand for a variety of music, and the music p

5、layer market, APP has deep whirlpool business, earnings and proportional to the user experience is always difficult, seemingly dazzling music application did not allow several users to really like it. In this context, an

6、 object based on the Android open source platform de</p><p>  Keywords: online music, player, time off, gradle, okhttp</p><p><b>  目錄</b></p><p><b>  第1章 緒論1<

7、/b></p><p><b>  1.1 背景1</b></p><p>  1.2 國內(nèi)外現(xiàn)狀1</p><p>  1.3 目標(biāo)及范圍2</p><p>  1.4 核心技術(shù)3</p><p>  第2章 Android音樂播放器需求分析5</p>&

8、lt;p>  2.1 功能性需求分析5</p><p>  2.1.1 本地音樂5</p><p>  2.1.2 在線音樂6</p><p>  2.1.3 在線搜索8</p><p>  2.1.4 播放控制9</p><p>  2.1.5 擴(kuò)展功能12</p><

9、;p>  2.2 非功能性需求分析14</p><p>  2.2.1 軟件性能指標(biāo)14</p><p>  2.2.2 軟件兼容性14</p><p>  第3章 Android音樂播放器系統(tǒng)概要設(shè)計(jì)15</p><p>  3.1 主要設(shè)計(jì)內(nèi)容15</p><p>  3.2 設(shè)計(jì)思想

10、15</p><p>  3.3 系統(tǒng)框架16</p><p>  3.4 系統(tǒng)功能17</p><p>  3.4.1 本地音樂17</p><p>  3.4.2 在線音樂18</p><p>  3.4.3 在線搜索18</p><p>  3.4.4 播放控制19

11、</p><p>  3.4.5 擴(kuò)展功能19</p><p>  3.5 流程設(shè)計(jì)19</p><p>  第4章 Android音樂播放器存儲設(shè)計(jì)21</p><p>  4.1 本地存儲21</p><p>  4.2 遠(yuǎn)程存儲22</p><p>  第5章 And

12、roid音樂播放器詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)23</p><p>  5.1 系統(tǒng)架構(gòu)詳細(xì)設(shè)計(jì)23</p><p>  5.1.1 系統(tǒng)架構(gòu)方式分析23</p><p>  5.1.2 系統(tǒng)框架分析24</p><p>  5.1.3 網(wǎng)絡(luò)請求框架分析27</p><p>  5.1.4 數(shù)據(jù)緩存框架28&l

13、t;/p><p>  5.2 功能詳細(xì)設(shè)計(jì)30</p><p>  5.2.1 本地音樂詳細(xì)設(shè)計(jì)30</p><p>  5.2.2 在線音樂詳細(xì)設(shè)計(jì)32</p><p>  5.2.3 在線搜索詳細(xì)設(shè)計(jì)34</p><p>  5.2.4 播放控制詳細(xì)設(shè)計(jì)35</p><p>

14、  5.2.5 擴(kuò)展功能詳細(xì)設(shè)計(jì)37</p><p>  5.2.6 功能設(shè)置詳細(xì)設(shè)計(jì)39</p><p>  5.2.7 關(guān)于界面詳細(xì)設(shè)計(jì)41</p><p>  第6章 Android音樂播放器系統(tǒng)測試43</p><p>  6.1 功能測試43</p><p>  6.1.1 測試環(huán)境4

15、3</p><p>  6.1.2 測試用例43</p><p>  6.1.3 測試結(jié)論44</p><p>  6.2 兼容性測試45</p><p><b>  結(jié)論47</b></p><p><b>  致謝48</b></p><

16、;p><b>  參考文獻(xiàn)49</b></p><p><b>  第1章 緒論</b></p><p><b>  1.1 背景</b></p><p>  Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開放

17、手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。2013年的第四季度,Android平臺手機(jī)的全球市場份額已經(jīng)達(dá)到78.1%。2013年09月24日谷歌開發(fā)的操作系統(tǒng)Android在迎來了5歲生日,全世界采用這款系統(tǒng)的設(shè)備數(shù)量已經(jīng)達(dá)到10億臺。如今,Android平臺手機(jī)的全球市場份額已達(dá)到84.7%。本設(shè)計(jì)的音樂播放器采用了Android開源系統(tǒng)技術(shù),利用Java語言和Androi

18、d Studio工具對播放器進(jìn)行開發(fā)。</p><p>  如今社會生活節(jié)奏日益加快,人們的壓力也越來越大,傾聽音樂則是最有效的減輕壓力的方法之一。隨著智能手機(jī)的普及,手機(jī)音質(zhì)的提升,大多數(shù)人都有了在手機(jī)上聽歌的習(xí)慣,縱觀市面上的商業(yè)化音樂播放APP,大多臃腫不堪,功能繁瑣,而大多數(shù)功能都是用戶用不到的,大量消耗手機(jī)內(nèi)存和CPU,操作復(fù)雜,同質(zhì)化嚴(yán)重,廣告繁多,界面設(shè)計(jì)沒有吸引力,容易產(chǎn)生審美疲勞,無法使人全身心

19、的放松,有時(shí)遇到喜歡的音樂想要下載還要付費(fèi),大大降低了聽歌體驗(yàn)。</p><p>  1.2 國內(nèi)外現(xiàn)狀</p><p>  手機(jī)的越來越智能化相當(dāng)大的程度都要通過軟件和應(yīng)用來體現(xiàn),2011年盛放的移動互聯(lián)網(wǎng)應(yīng)用市場帶來了各門類的諸多精品應(yīng)用,音樂播放器市場更是如此,除了傳統(tǒng)單一的本地播放功能,Android平臺的音樂播放器已經(jīng)衍生出支持多格式、歌曲信息多合一提供、資源不僅依靠本地而且靠

20、移動互聯(lián)網(wǎng)提供、輔助功能完善的多種或集百家精粹,或有一技之長的精品播放器。</p><p><b>  QQ音樂</b></p><p>  QQ音樂是騰訊公司推出的網(wǎng)絡(luò)音樂平臺,是中國互聯(lián)網(wǎng)領(lǐng)域領(lǐng)先的正版數(shù)字音樂服務(wù)的領(lǐng)先平臺,始終走在音樂潮流最前端,向廣大用戶提供方便流暢的在線音樂和豐富多彩的音樂社區(qū)服務(wù)。QQ音樂的缺點(diǎn)是如果要享受全部功能需要付費(fèi)開通VIP。&l

21、t;/p><p><b>  酷狗音樂</b></p><p>  酷狗是中國領(lǐng)先的數(shù)字音樂交互服務(wù)提供商,互聯(lián)網(wǎng)技術(shù)創(chuàng)新的領(lǐng)軍企業(yè),致力于為互聯(lián)網(wǎng)用戶和數(shù)字音樂產(chǎn)業(yè)發(fā)展提供最佳的解決方案??峁肪哂辛己玫囊魳沸Ч?,豐富的網(wǎng)絡(luò)音樂資源,簡單的操作成為酷狗音樂吸引用戶的特色??峁芬魳返娜秉c(diǎn)是廣告較多,且不能關(guān)閉。</p><p><b>  

22、天天動聽</b></p><p>  天天動聽(TTPOD)是上海水渡石信息技術(shù)有限公司開發(fā)音樂播放器,是一款功能強(qiáng)大、完全免費(fèi)的音樂播放軟件。支持歌詞和歌曲圖片下載,皮膚隨心更換,更有炫麗震撼的可視化效果,同時(shí)預(yù)置豐富的均衡器效果,支持音效增強(qiáng),簡潔人性化的操作,給追求音樂品質(zhì)的你帶來了手機(jī)聽歌的全新體驗(yàn)。天天動聽的缺點(diǎn)是在低內(nèi)存手機(jī)上有明顯的卡頓。</p><p>  1.

23、3 目標(biāo)及范圍</p><p>  基于以上前提,決定設(shè)計(jì)并開發(fā)一款輕量級的、界面美觀的、操作簡單的、免費(fèi)的在線音樂播放器——波尼音樂。</p><p>  本軟件是一款A(yù)ndroid在線音樂播放器,支持播放本地歌曲與網(wǎng)絡(luò)歌曲。系統(tǒng)主要實(shí)現(xiàn)的功能是播放本地/網(wǎng)絡(luò)歌曲,控制音樂的播放、暫停,支持歌詞與專輯封面顯示,自動從云端匹配并下載歌詞,擁有多元化的歌曲排行榜,可以根據(jù)歌曲或歌手搜索相關(guān)

24、歌曲,喜歡的歌曲可以一鍵下載到本地,支持睡眠模式、夜間模式等實(shí)用功能。復(fù)古的黑膠唱片設(shè)計(jì),使用戶仿佛置身于二十世紀(jì)的音樂會現(xiàn)場,給用戶帶來充滿空靈感和現(xiàn)場感的體驗(yàn)。軟件體積小,運(yùn)行流暢,界面干凈無廣告,無多余權(quán)限,致力于提升用戶的聽歌體驗(yàn)。</p><p>  實(shí)施本項(xiàng)目需要的硬件資源如下:</p><p>  x86架構(gòu)電腦一臺(CPU Intel i5、內(nèi)存8GB、存儲空間500GB)

25、</p><p>  Android智能手機(jī)一臺</p><p>  實(shí)施本項(xiàng)目需要的軟件資源如下:</p><p><b>  JDK 1.8</b></p><p>  Android SDK 23</p><p>  Gradle 2.0</p><p>  Andr

26、oid Studio 2.0[2] </p><p><b>  1.4 核心技術(shù)</b></p><p>  本項(xiàng)目用到的開源技術(shù)有:</p><p><b>  OkHttp</b></p><p>  (https://github.com/square/okhttp)</p>

27、<p>  HTTP是現(xiàn)在主流應(yīng)用使用的網(wǎng)絡(luò)請求方式,用來交換數(shù)據(jù)和內(nèi)容,有效的使用HTTP可以使APP變的更快和減少流量的使用。</p><p>  OkHttp是一個(gè)很棒HTTP客戶端:</p><p>  支持SPDY,可以合并多個(gè)到同一個(gè)主機(jī)的請求</p><p>  使用連接池技術(shù)減少請求的延遲(如果SPDY是可用的話)</p>

28、<p>  使用GZIP壓縮減少傳輸?shù)臄?shù)據(jù)量</p><p>  緩存響應(yīng)避免重復(fù)的網(wǎng)絡(luò)請求</p><p>  系統(tǒng)主要利用OkHttp進(jìn)行網(wǎng)絡(luò)請求,與服務(wù)器交換數(shù)據(jù)。</p><p><b>  Gson</b></p><p>  (https://github.com/google/gson)</

29、p><p>  Gson 是 Google 提供的用來在 Java 對象和 JSON 數(shù)據(jù)之間進(jìn)行映射的 Java 類庫。可以將一個(gè) JSON 字符串轉(zhuǎn)成一個(gè) Java 對象,或者反過來。</p><p><b>  功能:</b></p><p>  使用toJson()和fromJson()方法,就可以非常容易的完成Java對象到JSON的相互

30、轉(zhuǎn)換。</p><p>  能將預(yù)先存在的無法修改的對象與JSON互相轉(zhuǎn)換。</p><p>  支持Java泛型的使用。</p><p>  允許對象的個(gè)性化表達(dá)形式(representation)。</p><p>  支持各種復(fù)雜(擁有深繼承層次結(jié)構(gòu)和大量使用泛型類型)的對象。</p><p>  系統(tǒng)主要利用G

31、son配合OkHttp將軟件從服務(wù)器獲取的原始數(shù)據(jù)進(jìn)行快速解析。</p><p>  Android-Universal-Image-Loader</p><p>  (https://github.com/nostra13/Android-Universal-Image-Loader)</p><p>  Android-Universal-Image-Loade

32、r是一個(gè)開源的UI組件程序,該項(xiàng)目的目的是提供一個(gè)可重復(fù)使用的儀器為異步圖像加載,緩存和顯示。</p><p><b>  特點(diǎn):</b></p><p><b>  多線程的圖像加載;</b></p><p>  圖片異步加載緩存機(jī)制,包括內(nèi)存緩存(軟引用)及本地緩存;</p><p>  動態(tài)對

33、ImageLoader的配置(線程池的大小,HTTP選項(xiàng),內(nèi)存和光盤高速緩存方式,顯示圖像,以及其他選項(xiàng));</p><p>  對加載過程實(shí)現(xiàn)監(jiān)聽和事件處理;</p><p>  能夠配置加載圖片的顯示選項(xiàng),包括圖片圓角處理和加載完成顯示動畫等。</p><p>  系統(tǒng)主要利用Android-Universal-Image-Loader將歌手、專輯等圖片進(jìn)行高效

34、的緩存,以提高應(yīng)用性能,并解決用戶流量。</p><p>  第2章 Android音樂播放器需求分析</p><p>  2.1 功能性需求分析</p><p>  根據(jù)項(xiàng)目要達(dá)到的目標(biāo),需要制定系統(tǒng)的基本需求,接下來將根據(jù)不同模塊描述系統(tǒng)需求,并配合用例圖來描述系統(tǒng)的功能性需求。分為以下五個(gè)模塊來描述:本地音樂需求,在線音樂需求,正在播放(播放控制)需求,在

35、線搜索需求,擴(kuò)展功能需求。</p><p>  2.1.1 本地音樂</p><p><b>  本地音樂列表的需求</b></p><p>  圖2-1 本地音樂用例圖</p><p><b>  播放</b></p><p><b>  參與者:使用者<

36、/b></p><p>  目標(biāo):使使用者可以播放所點(diǎn)擊歌曲</p><p>  前置條件:應(yīng)用已啟動,且在“我的音樂”頁面</p><p>  基本事件流:a.使用者點(diǎn)擊需要播放的歌曲item</p><p>  b.播放器將播放使用者所點(diǎn)擊的歌曲</p><p><b>  分享</b>

37、</p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以將所選歌曲分享給好友</p><p>  前置條件:應(yīng)用已啟動,且在“我的音樂”頁面,點(diǎn)擊“更多”按鈕</p><p>  基本事件流:a.使用者點(diǎn)擊需要分享歌曲item的“更多”按鈕,并點(diǎn)擊“分享”</p><

38、;p>  b.系統(tǒng)將提示使用者選擇分享方式</p><p><b>  設(shè)為鈴聲</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以將所選歌曲設(shè)置為手機(jī)鈴聲</p><p>  前置條件:應(yīng)用已啟動,且在“我的音樂”頁面,點(diǎn)擊“更多”按鈕<

39、/p><p>  基本事件流:a.使用者點(diǎn)擊需要設(shè)為鈴聲歌曲item的“更多”按鈕,并點(diǎn)擊“設(shè)為鈴聲”</p><p>  b.播放器將所選歌曲設(shè)置為手機(jī)鈴聲</p><p><b>  刪除</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):

40、使使用者可以將所選歌曲刪除</p><p>  前置條件:應(yīng)用已啟動,且在“我的音樂”頁面,點(diǎn)擊“更多”按鈕</p><p>  基本事件流:a.使用者點(diǎn)擊需要?jiǎng)h除歌曲item的“更多”按鈕,并點(diǎn)擊“刪除”</p><p>  b.播放器將所選歌曲刪除并從播放列表中移除</p><p>  2.1.2 在線音樂</p><

41、;p>  當(dāng)用戶點(diǎn)擊“在線音樂”中的歌曲排行榜時(shí)的需求</p><p>  圖2-2 在線歌單用例圖</p><p><b>  查看歌曲排行榜</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以查看所選的歌曲排行榜</p><

42、;p>  前置條件:應(yīng)用已啟動,且在“在線音樂”頁面</p><p>  基本事件流:a.使用者點(diǎn)擊需要查看的歌曲排行榜item</p><p>  b.播放器將打開所選的歌曲排行榜</p><p>  c.歌曲排行榜顯示排行榜說明、更新時(shí)間、歌曲列表</p><p>  當(dāng)用戶點(diǎn)擊進(jìn)入歌曲排行榜后,點(diǎn)擊歌曲item的“更多”按鈕的需求

43、</p><p>  圖2-3 在線音樂用例圖</p><p><b>  播放</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以播放所點(diǎn)擊的網(wǎng)絡(luò)歌曲</p><p>  前置條件:應(yīng)用已啟動,且在“歌曲排行榜”頁面</

44、p><p>  基本事件流:a.使用者點(diǎn)擊需要播放的網(wǎng)絡(luò)歌曲item</p><p>  b.播放器將播放使用者所點(diǎn)擊的網(wǎng)絡(luò)歌曲</p><p><b>  分享</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以將所選網(wǎng)絡(luò)歌曲的試

45、聽鏈接分享給好友</p><p>  前置條件:應(yīng)用已啟動,且在“歌曲排行榜”頁面,點(diǎn)擊“更多”按鈕</p><p>  基本事件流:a.使用者點(diǎn)擊需要分享網(wǎng)絡(luò)歌曲item的“更多”按鈕,并點(diǎn)擊“分享”</p><p>  b.系統(tǒng)將提示使用者選擇分享方式</p><p><b>  查看歌手信息</b></p&g

46、t;<p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以查看所選歌曲的歌手的詳細(xì)信息</p><p>  前置條件:應(yīng)用已啟動,且在“歌曲排行榜”頁面,點(diǎn)擊“更多”按鈕</p><p>  基本事件流:a.使用者點(diǎn)擊需要查看歌手信息的網(wǎng)絡(luò)歌曲item的“更多”按鈕,并點(diǎn)擊“查看歌手信息”</p&

47、gt;<p>  b.播放器將跳轉(zhuǎn)到“歌手信息”界面,顯示歌手圖片、身高、體重、簡介等信息</p><p><b>  下載</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以將所選網(wǎng)絡(luò)歌曲及其匹配的歌詞下載到本地</p><p>  前

48、置條件:應(yīng)用已啟動,且在“歌曲排行榜”頁面,點(diǎn)擊“更多”按鈕</p><p>  基本事件流:a.使用者點(diǎn)擊需要下載網(wǎng)絡(luò)歌曲item的“更多”按鈕,并點(diǎn)擊“下載”</p><p>  b.播放器將下載使用者所選網(wǎng)絡(luò)歌曲及其匹配的歌詞,并在下載完成后自動添加到“我的音樂”列表</p><p>  2.1.3 在線搜索</p><p><

49、b>  在線搜索時(shí)的需求</b></p><p>  圖2-4 在線搜索用例圖</p><p><b>  搜索</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以根據(jù)輸入的歌曲名/歌手名搜索相關(guān)歌曲</p><p

50、>  前置條件:應(yīng)用已啟動,且在“搜索”界面,系統(tǒng)已連接至互聯(lián)網(wǎng)</p><p>  基本事件流:a.使用者輸入歌曲名/歌手名并點(diǎn)擊搜索</p><p>  b.播放器將搜索結(jié)果以列表的形式展示</p><p><b>  播放</b></p><p>  同在線音樂“播放”需求</p><p&

51、gt;<b>  分享</b></p><p>  同在線音樂“分享”需求</p><p><b>  下載</b></p><p>  同在線音樂“分享”需求</p><p>  2.1.4 播放控制</p><p><b>  播放控制的需求</b>

52、;</p><p>  圖2-5 播放控制用例圖</p><p><b>  播放/暫停</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以播放/暫停當(dāng)前歌曲</p><p>  前置條件:應(yīng)用已啟動,且在“正在播放”頁面<

53、;/p><p>  基本事件流:a.使用者點(diǎn)擊播放/暫停按鈕</p><p>  b.播放器將播放/暫停當(dāng)前歌曲</p><p><b>  上一曲</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以切換到上一首歌曲</p&

54、gt;<p>  前置條件:應(yīng)用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者點(diǎn)擊上一曲按鈕</p><p>  b.播放器將切換到上一首歌曲</p><p><b>  下一曲</b></p><p><b>  參與者:使用者</b></p>

55、<p>  目標(biāo):使使用者可以切換到下一首歌曲</p><p>  前置條件:應(yīng)用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者點(diǎn)擊下一曲按鈕</p><p>  b.播放器將切換到下一首歌曲</p><p><b>  播放模式</b></p><p>&

56、lt;b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以切換播放模式(全部循環(huán)/隨機(jī)播放/單曲循環(huán))</p><p>  前置條件:應(yīng)用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者點(diǎn)擊切換播放模式按鈕</p><p>  b.播放器將切換播放模式</p><

57、p><b>  顯示專輯封面</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使正在播放界面可以顯示當(dāng)前歌曲的專輯封面,并添加旋轉(zhuǎn)動畫</p><p>  前置條件:應(yīng)用已啟動,且在“正在播放”頁面,且當(dāng)前正在播放的歌曲包含專輯封面</p><p>  基

58、本事件流:播放器播放歌曲時(shí)自動顯示其專輯封面,沒有封面的歌曲顯示默認(rèn)封面</p><p><b>  顯示歌詞</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使正在播放界面可以顯示當(dāng)前歌曲的歌詞,并滾動顯示</p><p>  前置條件:應(yīng)用已啟動,在“正在播

59、放”頁面,當(dāng)前正在播放的歌曲包含歌詞</p><p>  基本事件流:播放器播放歌曲時(shí)自動顯示其歌詞,并根據(jù)歌曲播放進(jìn)度自動滾動到相應(yīng)位置,沒有歌詞的歌曲參見“自動搜索歌詞”需求</p><p><b>  自動搜索歌詞</b></p><p><b>  參與者:使用者</b></p><p> 

60、 目標(biāo):如果當(dāng)前播放的歌曲沒有歌詞,則從網(wǎng)絡(luò)搜索并下載歌詞</p><p>  前置條件:應(yīng)用已啟動,且在“正在播放”頁面,且當(dāng)前正在播放的歌曲不包含歌詞,系統(tǒng)已連接至互聯(lián)網(wǎng)</p><p>  基本事件流:播放器播放歌曲時(shí)如果沒有歌詞,則自動從網(wǎng)絡(luò)搜索并下載,下載完成后自動顯示,同“顯示歌詞”需求</p><p><b>  播放進(jìn)度調(diào)節(jié)</b&g

61、t;</p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以調(diào)節(jié)當(dāng)前播放歌曲的進(jìn)度</p><p>  前置條件:應(yīng)用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者拖拽播放進(jìn)度條</p><p>  b.播放器自動跳轉(zhuǎn)到用戶選擇的位置&

62、lt;/p><p><b>  音量調(diào)節(jié)</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以調(diào)節(jié)音量</p><p>  前置條件:應(yīng)用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者拖拽音量進(jìn)度條</

63、p><p>  b.系統(tǒng)自動調(diào)節(jié)音量</p><p>  2.1.5 擴(kuò)展功能</p><p>  播放器附帶的擴(kuò)展功能需求</p><p>  圖2-6 擴(kuò)展功能用例圖</p><p><b>  天氣</b></p><p><b>  參與者:使用者</

64、b></p><p>  目標(biāo):使播放器可以自動定位并顯示當(dāng)前城市的實(shí)時(shí)天氣信息</p><p>  前置條件:應(yīng)用已啟動,系統(tǒng)已連接至互聯(lián)網(wǎng)</p><p>  基本事件流:a.使用者啟動應(yīng)用</p><p>  b.播放器將自動定位并顯示當(dāng)前城市的實(shí)時(shí)天氣信息,包括天氣、城市、風(fēng)力、濕度等信息</p><p>

65、;<b>  功能設(shè)置</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以自定義播放器的偏好設(shè)置</p><p>  前置條件:應(yīng)用已啟動,打開設(shè)置界面</p><p>  基本事件流:a.使用者點(diǎn)擊設(shè)置項(xiàng)</p><p>  

66、b.播放器自動保存所選設(shè)置項(xiàng),包括是否允許移動網(wǎng)絡(luò)播放在線歌曲、音效調(diào)節(jié)等</p><p><b>  夜間模式</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以切換夜間/日間模式</p><p>  前置條件:應(yīng)用已啟動</p>&l

67、t;p>  基本事件流:a.使用者點(diǎn)擊夜間模式</p><p>  b.播放器自動切換到夜間/日間模式,不影響當(dāng)前播放的歌曲</p><p><b>  定時(shí)停止播放</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以定時(shí)停止播放歌曲并退出應(yīng)用&

68、lt;/p><p>  前置條件:應(yīng)用已啟動</p><p>  基本事件流:a.使用者點(diǎn)擊定時(shí)停止播放</p><p>  b.播放器彈出對話框讓使用者設(shè)定時(shí)間</p><p>  c.到達(dá)使用者設(shè)置的事件后自動停止播放并退出應(yīng)用</p><p><b>  關(guān)于說明</b></p>

69、<p><b>  參與者:使用者</b></p><p>  目標(biāo):使使用者可以查看播放器的關(guān)于說明</p><p>  前置條件:應(yīng)用已啟動</p><p>  基本事件流:a.使用者點(diǎn)擊關(guān)于</p><p>  b.播放器跳轉(zhuǎn)到關(guān)于界面,包含應(yīng)用版本、檢查更新、推薦給朋友、作者信息等</p>

70、<p><b>  啟動界面</b></p><p><b>  參與者:使用者</b></p><p>  目標(biāo):使播放器定期更新啟動界面圖</p><p>  前置條件:應(yīng)用已啟動,系統(tǒng)已連接至互聯(lián)網(wǎng)</p><p>  基本事件流:a.使用者啟動應(yīng)用</p><

71、p>  b.播放器檢查本地是否已經(jīng)下載了啟動界面圖片,如果沒有,則從網(wǎng)絡(luò)后臺下載;如果已經(jīng)下載,則直接展示啟動畫面圖</p><p>  2.2 非功能性需求分析</p><p>  2.2.1 軟件性能指標(biāo)</p><p>  內(nèi)存占用:30~40MB</p><p>  CPU占用:5~10%</p><p&

72、gt;<b>  啟動時(shí)間:1~2s</b></p><p>  流量消耗:每次運(yùn)行消耗1000KB以內(nèi)(下載流量除外)</p><p><b>  FPS:25~30</b></p><p>  2.2.2 軟件兼容性</p><p>  系統(tǒng):Android 4.0或更高</p>

73、<p>  RAM:128MB或更高</p><p>  ROM:256MB或更高</p><p>  CPU架構(gòu):ARM、x86、MIPS</p><p>  第3章 Android音樂播放器系統(tǒng)概要設(shè)計(jì)</p><p>  3.1 主要設(shè)計(jì)內(nèi)容</p><p>  系統(tǒng)設(shè)計(jì)了一個(gè)Android平臺的

74、在線音樂播放器,基于Native方式進(jìn)行開發(fā)。采用MVC框架,將項(xiàng)目的視圖層、數(shù)據(jù)層和邏輯層分離組織,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。MVC模式圖如下:</p><p>  圖3-1 MVC模式</p><p>  系統(tǒng)基于Android開源平臺,使用Java語言編寫,視圖層使用xml實(shí)現(xiàn)。使用Service后臺播放音樂,通過B

75、inder綁定Service并設(shè)置回調(diào)的方式實(shí)現(xiàn)前臺界面(Activity)到后臺服務(wù)(Service)之間的交互。系統(tǒng)和服務(wù)器采用json數(shù)據(jù),通過OkHttp+Gson進(jìn)行數(shù)據(jù)的傳輸和解析。</p><p>  服務(wù)器為百度在線音樂服務(wù),通過暴露的rest API接口,使得客戶端可以從服務(wù)器獲得在線音樂數(shù)據(jù)。</p><p><b>  3.2 設(shè)計(jì)思想</b>

76、</p><p>  系統(tǒng)由本地音樂文件與百度音樂服務(wù)器提供播放源,前臺界面展示播放效果。</p><p><b>  圖3-2 設(shè)計(jì)思想</b></p><p>  前臺界面包括Activity和Fragment,Activity通過bindService方法可以得到Service的實(shí)例,然后通過Service的方法設(shè)置Activity的回調(diào)

77、,Activity收到回調(diào)事件后抄送給Fragment。</p><p>  在線音樂部分通過OkHttp+Gson從百度音樂服務(wù)獲取并解析數(shù)據(jù),圖片緩存通過Universal-Image-Loader的三級緩存實(shí)現(xiàn)。</p><p><b>  3.3 系統(tǒng)框架</b></p><p>  系統(tǒng)主要分為后臺服務(wù),數(shù)據(jù)層,業(yè)務(wù)層,前臺界面四個(gè)

78、層次,后臺服務(wù)主要提供播放邏輯控制,數(shù)據(jù)層包括本地?cái)?shù)據(jù)和服務(wù)器數(shù)據(jù),業(yè)務(wù)層是各個(gè)功能模塊,前臺界面展示當(dāng)前播放歌曲的信息。</p><p>  圖3-3 系統(tǒng)框架圖</p><p><b>  3.4 系統(tǒng)功能</b></p><p>  系統(tǒng)主要包括本地音樂,在線音樂等幾大功能,功能如下圖:</p><p><

79、b>  圖3-4 系統(tǒng)功能</b></p><p>  3.4.1 本地音樂</p><p>  本地音樂功能包括播放,分享,設(shè)為鈴聲等功能,具體功能如下圖:</p><p><b>  圖3-5 本地音樂</b></p><p>  3.4.2 在線音樂</p><p> 

80、 在線音樂功能包括播放,分享,查看歌手信息等功能,具體功能如下:</p><p><b>  圖3-6 在線音樂</b></p><p>  3.4.3 在線搜索</p><p>  在線搜索功能包括搜索,播放,分享,下載功能,具體功能如下:</p><p><b>  圖3-7 在線搜索</b>

81、</p><p>  3.4.4 播放控制</p><p>  播放控制功能主要包括上一曲/下一曲,播放進(jìn)度調(diào)節(jié),播放模式切換等,具體功能如下圖:</p><p><b>  圖3-8 播放控制</b></p><p>  3.4.5 擴(kuò)展功能</p><p>  擴(kuò)展功能包括夜間模式,定時(shí)關(guān)

82、閉,自動更新等功能,具體功能如下圖:</p><p><b>  圖3-9 擴(kuò)展功能</b></p><p><b>  3.5 流程設(shè)計(jì)</b></p><p>  系統(tǒng)主界面顯示本地音樂列表,在線歌單列表,快速播放控制以及側(cè)邊菜單欄,點(diǎn)擊本地音樂可以播放,點(diǎn)擊歌單可以進(jìn)入歌單詳情,點(diǎn)擊快速播放控制條可以進(jìn)入正在播放界

83、面,側(cè)邊菜單欄包括一些附加功能,系統(tǒng)總體流程圖如下:</p><p>  圖3-10 流程設(shè)計(jì)圖</p><p>  第4章 Android音樂播放器存儲設(shè)計(jì)</p><p><b>  4.1 本地存儲</b></p><p>  該系統(tǒng)支持用戶自定義偏好設(shè)置,因此需要設(shè)計(jì)本地存儲。Android目前有以下三種存儲

84、方式。</p><p>  使用SharedPreferences存儲數(shù)據(jù)</p><p>  適用范圍:保存少量的數(shù)據(jù),且這些數(shù)據(jù)的格式非常簡單:字符串型、基本類型的值。比如應(yīng)用程序的各種配置信息(如是否打開音效、是否使用震動效果、小游戲的玩家積分等),解鎖口令密碼等。</p><p>  核心原理:保存基于XML文件存儲的key-value鍵值對數(shù)據(jù),通常用來存

85、儲一些簡單的配置信息。通過DDMS的File Explorer面板,展開文件瀏覽樹,很明顯SharedPreferences數(shù)據(jù)總是存儲在/data/data/<package name>/shared_prefs目錄下。SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過SharedPreferences.edit()獲取的內(nèi)部接口Editor對象實(shí)現(xiàn)。 SharedPreference

86、s本身是一 個(gè)接口,程序無法直接創(chuàng)建SharedPreferences實(shí)例,只能通過Context提供的getSharedPreferences(String name, int mode)方法來獲取SharedPreferences實(shí)例。</p><p><b>  文件存儲數(shù)據(jù)</b></p><p>  核心原理: Context提供了兩個(gè)方法來打開數(shù)據(jù)文件里的

87、文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),這兩個(gè)方法第一個(gè)參數(shù) 用于指定文件名,第二個(gè)參數(shù)指定打開文件的模式。</p><p>  SQLite存儲數(shù)據(jù)</p><p>  SQLite是輕量級嵌入式數(shù)據(jù)庫引擎,它支持 SQL 語言,并且只利用很少的內(nèi)

88、存就有很好的性能?,F(xiàn)在的主流移動設(shè)備像Android、iPhone等都使用SQLite作為復(fù)雜數(shù)據(jù)的存儲引擎,在為移動設(shè)備開發(fā)應(yīng)用程序時(shí),也許就要使用到SQLite來存儲大量的數(shù)據(jù),所以就需要掌握移動設(shè)備上的SQLite開發(fā)技巧。</p><p><b>  結(jié)論</b></p><p>  根據(jù)上面的分析,只需要存儲一些基本配置,因此只需要選擇一種輕量級的存儲方式即

89、可,所以,選擇使用SharedPreferences來存儲數(shù)據(jù)。將需要保存的數(shù)據(jù)以key-value形式寫入xml文件,文件大小小于1KB。</p><p><b>  保存的數(shù)據(jù)格式如下</b></p><p><b>  4.2 遠(yuǎn)程存儲</b></p><p>  該系統(tǒng)需要查看在線歌曲排行榜、搜索在線歌曲,因此需

90、要遠(yuǎn)程服務(wù)器存儲數(shù)據(jù),這里遠(yuǎn)程服務(wù)器不在本設(shè)計(jì)的范疇之內(nèi),因此這里不過多討論。</p><p>  第5章 Android音樂播放器詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)</p><p>  本章將根據(jù)系統(tǒng)概要設(shè)計(jì),對每個(gè)部分進(jìn)行詳細(xì)設(shè)計(jì),給出代碼實(shí)現(xiàn),代碼分析,并對期間遇到的問題進(jìn)行詳細(xì)討論。</p><p>  5.1 系統(tǒng)架構(gòu)詳細(xì)設(shè)計(jì)</p><p>  

91、5.1.1 系統(tǒng)架構(gòu)方式分析</p><p><b>  現(xiàn)狀</b></p><p>  Android系統(tǒng)App目前有三種主流的架構(gòu)方式:</p><p><b>  Native</b></p><p><b>  原生方式</b></p><p&g

92、t;<b>  Html5</b></p><p>  萬維網(wǎng)的核心語言、標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用超文本標(biāo)記語言(HTML)的第五次重大修改。</p><p>  React Native</p><p>  React Native使你能夠在Javascript和React的基礎(chǔ)上獲得完全一致的開發(fā)體驗(yàn),構(gòu)建世界一流的原生APP。<

93、/p><p>  React Native著力于提高多平臺開發(fā)的開發(fā)效率 —— 僅需學(xué)習(xí)一次,編寫任何平臺。(Learn once, write anywhere)</p><p>  Facebook已經(jīng)在多項(xiàng)產(chǎn)品中使用了React Native,并且將持續(xù)地投入建設(shè)React Native。</p><p><b>  分析</b></p

94、><p>  三種架構(gòu)方式的對比分析:</p><p><b>  開發(fā)方式</b></p><p>  代碼結(jié)構(gòu): React Native更為合理,組件化程度高</p><p>  UI布局:Web布局靈活度 > React Native > Native</p><p>  UI截面

95、圖:React Native使用的是原生組件</p><p>  路由/Navigation:React Native & Native更勝一籌</p><p>  第三方生態(tài)鏈:Native modules + js modules = React Native modules</p><p><b>  性能 & 體驗(yàn)</b>

96、;</p><p>  內(nèi)存:Native最少;因?yàn)镽eact Native含有框架,所以相對較高,但是后期平穩(wěn)后會優(yōu)于Native。</p><p>  CPU:React Native居中。</p><p>  動畫:React Native動畫需求基本滿足。</p><p>  安裝包體積:React Native框架打包后,811KB

97、。相比熱更新,可以忽略和考慮資源規(guī)劃。</p><p>  Big ListView</p><p>  真機(jī)體驗(yàn):Native >= React Native > H5/Hybrid</p><p><b>  更新 & 維護(hù)</b></p><p>  更新能力: H5/Hybird > R

98、eact Native > Native</p><p>  維護(hù)成本: H5/Hybird <= React Native < Native</p><p>  React Native定制難度相比Native有些大;但是具備跨平臺能力和熱更新能力。</p><p><b>  結(jié)論</b></p><p

99、>  考慮到項(xiàng)目并不需要熱更新,偏向于離線使用,播放界面專輯封面和歌詞使用了大量動畫,因此,綜合考慮決定使用Native架構(gòu)方式開發(fā)本項(xiàng)目。</p><p>  5.1.2 系統(tǒng)框架分析</p><p>  論文實(shí)現(xiàn)了一個(gè)個(gè)性化的音樂播放器。在Android中,Activity主要負(fù)責(zé)前臺頁面的展示,Service主要負(fù)責(zé)需要長期運(yùn)行的任務(wù)。眾所周知,音樂播放需要支持應(yīng)用退出后繼續(xù)

100、播放,因此不能在Activity中直接播放音樂,因?yàn)檫@樣的話界面退出后音樂就停止播放了。</p><p>  使用Service播放音樂</p><p>  Android SDK提供了Service,用于類似*nix守護(hù)進(jìn)程或者windows的服務(wù)。</p><p>  Service有兩種類型:</p><p>  本地服務(wù)(Local

101、Service):用于應(yīng)用程序內(nèi)部</p><p>  遠(yuǎn)程服務(wù)(Remote Sercie):用于Android系統(tǒng)內(nèi)部的應(yīng)用程序之間</p><p>  前者用于實(shí)現(xiàn)應(yīng)用程序自己的一些耗時(shí)任務(wù),比如查詢升級信息,并不占用應(yīng)用程序比如Activity所屬線程,而是單開線程后臺執(zhí)行,這樣用戶體驗(yàn)比較好。</p><p>  后者可被其他應(yīng)用程序復(fù)用,比如天氣預(yù)報(bào)服務(wù)

102、,其他應(yīng)用程序不需要再寫這樣的服務(wù),調(diào)用已有的即可。</p><p>  這里不需要其他程序共享Service,因此采用本地服務(wù)。</p><p>  前臺界面(Activity)與后臺服務(wù)(Service)通信</p><p>  Android中的四大組件是相互獨(dú)立的,因此必須設(shè)計(jì)一個(gè)框架來實(shí)現(xiàn)前臺界面(Activity)和后臺服務(wù)(Service)的相互。&l

103、t;/p><p>  Activity和Service的通信有以下幾種方式:</p><p>  回調(diào)接口的方式 。當(dāng)Activity通過調(diào)用bindService(Intent service, ServiceConnection conn,int flags),可以得到一個(gè)Service的一個(gè)對象實(shí)例,然后就可以訪問Service中的方法,完成Activity→Service的通信;通過為

104、Service添加監(jiān)聽器的方法,Service作為被觀察者,Activity作為觀察者,當(dāng)有新事件時(shí),Service通知Activity,完成Service→Activity的通信。這種方式適合Activity與Service交互比較頻繁的情況。</p><p>  通過廣播接收者。在Service中執(zhí)行完耗時(shí)操作后,將結(jié)果以廣播的形式發(fā)送,在Activity中注冊廣播,接收到結(jié)果后更新UI。因?yàn)楹臅r(shí)的操作結(jié)果不

105、需要以Handler的方式發(fā)送到主線程,可以直接在子線程中發(fā)送廣播,接收者始終運(yùn)行在主線程中。完成Service→Activity的通信。同樣,Activity將事件以廣播的方式發(fā)送給Service,完成Activity→Service的通信。這種方式適合Activity與Service交互不太頻繁的情況。</p><p>  通過startService方式。Activity通過startService將事件發(fā)

106、送到Service的onStartCommand()方法,然后Service執(zhí)行相應(yīng)的操作,完成Activity→Service的通信;Service通過廣播將事件發(fā)送到Activity,Activity中需注冊廣播接收器,完成Service→Activity的通信。這種方式適合Activity與Service交互不太頻繁的情況。</p><p>  經(jīng)過以上分析,由于音樂播放前臺界面(Activity)和后臺服

107、務(wù)(Service)需要頻繁的交互,因此應(yīng)選擇第一種通信方式。</p><p>  模塊(Fragment)與后臺服務(wù)(Service)通信</p><p>  應(yīng)用在主窗口(Activity)中擁有三個(gè)模塊(Fragment),“我的音樂”,“在線音樂”和“正在播放”模塊,其中“我的音樂”和“正在播放”需要和后臺服務(wù)頻繁通信。有了前面的Activity和Service的通信方法,需要將A

108、ctivity作為一個(gè)中介,通過Activity將Service的實(shí)例共享給Fragment,Activity將Service的回調(diào)抄送給Fragment,間接完成Fragment和Service的通信。</p><p><b>  詳細(xì)代碼實(shí)現(xiàn):</b></p><p>  Activity綁定Service,獲得Service的實(shí)例,并綁定監(jiān)聽器</p>

109、;<p>  Fragment通過生命周期方法onAttach()獲取Activity的實(shí)例,進(jìn)而獲得Service的實(shí)例</p><p>  Service通過監(jiān)聽器將時(shí)間發(fā)送給Activity,Activity收到事件后同時(shí)將事件抄送給Fragment</p><p>  5.1.3 網(wǎng)絡(luò)請求框架分析</p><p>  網(wǎng)絡(luò)請求框架主要是向服務(wù)

110、器請求數(shù)據(jù)。大多數(shù)的Android應(yīng)用程序都會使用HTTP協(xié)議來發(fā)送和接收網(wǎng)絡(luò)數(shù)據(jù),而Android中主要提供了兩種方式來進(jìn)行HTTP操作,HttpURLConnection和HttpClient。這兩種方式都支持HTTPS協(xié)議、以流的形式進(jìn)行上傳和下載、配置超時(shí)時(shí)間、IPv6、以及連接池等功能。</p><p>  HttpClient</p><p>  DefaultHttpClie

111、nt和AndroidHttpClient都是HttpClient具體的實(shí)現(xiàn)類,它們都擁有眾多的API,而且實(shí)現(xiàn)比較穩(wěn)定,bug數(shù)量也很少。</p><p>  但同時(shí)也由于HttpClient的API數(shù)量過多,使得很難在不破壞兼容性的情況下對它進(jìn)行升級和擴(kuò)展,所以目前Android團(tuán)隊(duì)在提升和優(yōu)化HttpClient方面的工作態(tài)度并不積極。</p><p>  HttpURLConnect

112、ion</p><p>  HttpURLConnection是一種多用途、輕量級的HTTP客戶端,使用它來進(jìn)行HTTP操作可以適用于大多數(shù)的應(yīng)用程序。雖然HttpURLConnection的API提供的比較簡單,但是同時(shí)這也使得可以更加容易地去使用和擴(kuò)展它。</p><p><b>  結(jié)論</b></p><p>  在Android 2.

113、2版本之前,HttpClient擁有較少的bug,因此使用它是最好的選擇。</p><p>  而在Android 2.3版本及以后,HttpURLConnection則是最佳的選擇。它的API簡單,體積較小,因而非常適用于Android項(xiàng)目。壓縮和緩存機(jī)制可以有效地減少網(wǎng)絡(luò)訪問的流量,在提升速度和省電方面也起到了較大的作用。對于新的應(yīng)用程序應(yīng)該更加偏向于使用HttpURLConnection。</p>

114、;<p>  系統(tǒng)的網(wǎng)絡(luò)請求框架是基于OkHttp,并對OkHttp進(jìn)行了封裝,使它更易使用。OkHttp內(nèi)部實(shí)現(xiàn)了Apach Http Client和Http Url Connection,在Android SDK API 9以下使用Http Client,Android SDK API 9以上使用輕量級的Http框架HttpUrlConnection。</p><p><b>  關(guān)鍵

115、代碼</b></p><p>  5.1.4 數(shù)據(jù)緩存框架</p><p>  數(shù)據(jù)緩存框架負(fù)責(zé)將常用的數(shù)據(jù)緩存在內(nèi)存(Memory)中,方便系統(tǒng)隨時(shí)使用。這里主要講解歌曲專輯封面圖片的緩存實(shí)現(xiàn)。由于切換歌曲后需要將專輯封面圖片加載到內(nèi)存中,而這一過程是一個(gè)耗時(shí)操作,尤其是專輯封面圖片較大時(shí),可以感覺到界面有明顯的卡頓,而如果每次切換歌曲都要加載這么久的話,會大大降低用戶體驗(yàn)

116、。</p><p>  加載Bitmap耗時(shí)的原因</p><p>  Android API 有個(gè)方法來測量bitmap的大?。?lt;/p><p>  通過這個(gè)方法,可以獲取到一張 Bitmap 在運(yùn)行時(shí)所占用的內(nèi)存。比如,一張 522x686 的 PNG 圖片,把它放到 drawable-xxhdpi 目錄下,在三星s6上加載,占用內(nèi)存2547360B,即約2.5

117、MB,這對于內(nèi)存有限的Android移動設(shè)備來說已經(jīng)是很大了。</p><p>  解決問題的思路是,加載圖片時(shí)按需加載,需要多大,就加載多大的圖片,以縮短加載時(shí)間,避免OOM,將常用的圖片緩存起來,盡量減少加載次數(shù),提高用戶體驗(yàn),因此應(yīng)該使用LRU緩存技術(shù),將加載完成的圖片緩存起來。LruCache使用一個(gè)LinkedHashMap簡單的實(shí)現(xiàn)內(nèi)存的緩存,沒有軟引用,都是強(qiáng)引用。如果添加的數(shù)據(jù)大于設(shè)置的最大值,就

118、刪除最先緩存的數(shù)據(jù)來調(diào)整內(nèi)存,以達(dá)到最常用的總是不會被回收。</p><p><b>  關(guān)鍵代碼</b></p><p>  5.2 功能詳細(xì)設(shè)計(jì)</p><p>  系統(tǒng)包含本地音樂,在線音樂,在線搜索,播放控制,附加功能五大功能模塊,本地音樂包含播放,分享,設(shè)置鈴聲,刪除等功能;在線音樂包含播放,分享,查看歌手信息等功能;在線搜索包含搜

119、索,播放,分享等功能,播放控制包含上一曲/下一曲,切換播放模式,播放進(jìn)度調(diào)節(jié),顯示專輯封面、歌詞,自動搜索歌詞等功能;附加功能包含夜間模式,定時(shí)停止播放,功能設(shè)置等功能。下面將對主要的功能進(jìn)行詳細(xì)設(shè)計(jì):</p><p>  5.2.1 本地音樂詳細(xì)設(shè)計(jì)</p><p>  進(jìn)入播放器主界面將以列表的形式顯示本地下載的音樂,音樂信息包含標(biāo)題,歌手,專輯信息,點(diǎn)擊歌曲可以播放,標(biāo)記正在播放的

120、歌曲,點(diǎn)擊列表右側(cè)的更多按鈕可以選擇更多功能,如分享,設(shè)為鈴聲等。</p><p>  本地音樂相關(guān)類詳細(xì)說明</p><p>  表5-1 本地音樂相關(guān)類詳細(xì)說明</p><p><b>  本地音樂設(shè)計(jì)與實(shí)現(xiàn)</b></p><p>  表5-2 本地音樂設(shè)計(jì)與實(shí)現(xiàn)</p><p><b

121、>  本地音樂界面設(shè)計(jì)</b></p><p>  圖5-1 本地音樂界面設(shè)計(jì)</p><p>  5.2.2 在線音樂詳細(xì)設(shè)計(jì)</p><p>  進(jìn)入播放器主界面,點(diǎn)擊在線音樂標(biāo)簽,展示在線歌單列表,如熱歌榜,新歌榜等,點(diǎn)擊歌單進(jìn)入歌單詳情,歌單詳情包括歌單介紹,更新時(shí)間,歌單包含的歌曲列表,點(diǎn)擊歌曲可以播放,點(diǎn)擊列表右側(cè)更多按鈕可以分享,下

122、載等。</p><p>  在線音樂相關(guān)類詳細(xì)說明</p><p>  表5-3 在線音樂相關(guān)類詳細(xì)說明</p><p><b>  在線音樂設(shè)計(jì)與實(shí)現(xiàn)</b></p><p>  表5-4 在線音樂設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  在線音樂界面設(shè)計(jì)</b></p

123、><p>  圖5-2在線音樂界面設(shè)計(jì)(1) 圖5-3在線音樂界面設(shè)計(jì)(2)</p><p>  5.2.3 在線搜索詳細(xì)設(shè)計(jì)</p><p>  啟動應(yīng)用,點(diǎn)擊搜索按鈕,進(jìn)入搜索界面,輸入歌曲相關(guān)信息,如歌手名,歌曲名等,點(diǎn)擊搜索,可以搜索相關(guān)歌曲,搜索結(jié)果以列表形式展示,點(diǎn)擊可以播放,點(diǎn)擊列表右側(cè)可以分享,下載等。</p&

124、gt;<p>  在線搜索相關(guān)類詳細(xì)說明</p><p>  表5-5 在線搜索相關(guān)類詳細(xì)說明</p><p><b>  在線搜索設(shè)計(jì)與實(shí)現(xiàn)</b></p><p>  表5-6 在線搜索設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  在線搜索界面設(shè)計(jì)</b></p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論