【威哥說】磨礪營(yíng)靠什么比別人優(yōu)秀吱七?不僅僅是教學(xué)靠譜,老師靠譜鹤竭,更重要的是咱們?cè)谀サZ營(yíng)做的都是真實(shí)的商業(yè)項(xiàng)目踊餐,由磨礪營(yíng)自主研發(fā)的項(xiàng)目,今天我們就來了解一下咱們磨礪營(yíng)IT教育的實(shí)訓(xùn)項(xiàng)目《磨礪音樂》臀稚。
【目標(biāo)】首先我們要先定一個(gè)小目標(biāo)吝岭,來磨礪營(yíng)學(xué)一批磨礪營(yíng)自主研發(fā)的實(shí)戰(zhàn)商業(yè)項(xiàng)目。動(dòng)動(dòng)小手收藏轉(zhuǎn)發(fā)吧寺,讓更多人看到窜管。
【正文】1605期的第二個(gè)項(xiàng)目實(shí)戰(zhàn)已完結(jié)了,《磨礪音樂》APP正式與大家見面了稚机,本項(xiàng)目中大量運(yùn)用了經(jīng)典的Fragment嵌套技術(shù)幕帆,界面風(fēng)格走樸素簡(jiǎn)約風(fēng),扁平化產(chǎn)品級(jí)設(shè)計(jì)赖条,我們?cè)诤趺恳粋€(gè)細(xì)節(jié)的設(shè)計(jì)失乾,我們不隨便常熙,因?yàn)槲覀冎幌氪蛟旄玫漠a(chǎn)品。以下小編整理了一截圖碱茁,注意裸卫!睜大你的雙眼,不是開玩笑的:
下面整理一下本項(xiàng)目使用到的:
1纽竣、jsoup組件
用于抓取網(wǎng)絡(luò)音樂墓贿,分析網(wǎng)絡(luò)頁(yè)面返回的數(shù)據(jù),你可以理解一個(gè)網(wǎng)絡(luò)爬蟲工具退个,誰(shuí)說沒有服務(wù)器就不能實(shí)現(xiàn)在線音樂功能募壕,有了它,太贊了语盈。
2舱馅、androidannotations組件
本項(xiàng)目全面支持UI組件及事件處理的注解方式實(shí)現(xiàn),你會(huì)發(fā)現(xiàn)確實(shí)節(jié)省了好多代碼哇刀荒,也許你會(huì)有疑問代嗤,用注解不會(huì)影響性能嗎?NO,那是你太不了解androidannotations組件的強(qiáng)大功能了缠借,它使用apt組件為我們的注解代碼自動(dòng)生成了原生的代碼干毅,性能?決對(duì)不是問題泼返。
3硝逢、eventbus3.0組件
自從使用了eventbus組件實(shí)現(xiàn)事件傳遞,太TM的方便了绅喉,代碼簡(jiǎn)潔不說渠鸽,讓整個(gè)邏輯更加清晰可讀,當(dāng)然柴罐,我們也在項(xiàng)目中使用了傳統(tǒng)的接口回調(diào)徽缚,俗話說,不懂接口回調(diào)的程序員不是老司機(jī)革屠,這個(gè)必須要用的凿试,即使沒有eventbus,我們一樣可以完成似芝,只不過有這么好的組件那婉,我們?yōu)樯恫挥美眨粋€(gè)字国觉,用吧恃!
4、design包
design包是android5.0 Lollipop 發(fā)布的最具意義的一個(gè)版本麻诀,重要的原是Material Design的引入痕寓,我們?cè)陧?xiàng)目中使用design包的TabLayout實(shí)現(xiàn)tab功能和側(cè)滑菜單,與Toolbar蝇闭,DrawerLayout聯(lián)合使用呻率,界面效率超棒的。
5呻引、xutils3框架
國(guó)人寫的一個(gè)框架礼仗,共分為4大模塊,網(wǎng)絡(luò)請(qǐng)求逻悠、數(shù)據(jù)庫(kù)元践、圖片緩存、組件注解童谒,功能還是很強(qiáng)大的单旁,本項(xiàng)目利用這個(gè)組件來實(shí)現(xiàn)本地?cái)?shù)據(jù)庫(kù)的功能,由于其它功能模塊有更好的選擇饥伊,所以沒有使用到象浑,按作者的介紹,數(shù)據(jù)庫(kù)功能可以和著名的GreenDao相媲美琅豆,研究其源碼發(fā)現(xiàn)愉豺,數(shù)據(jù)緩存查詢功能確實(shí)強(qiáng)大,我能說是模仿GreenDao么茫因,希望xutils3的作者不要介意哈蚪拦,向優(yōu)秀者學(xué)習(xí)并靠近,本身就是一種優(yōu)秀冻押。
6驰贷、okhttp組件
本項(xiàng)目使用okhttp組件實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求功能,okhttp是當(dāng)前最主流的網(wǎng)絡(luò)請(qǐng)求框架翼雀,在大多數(shù)項(xiàng)目中都在使用饱苟,其高度的可定制性是勝出的法寶,只是對(duì)于初學(xué)者來說okhttp需要自己來封裝貌似有點(diǎn)難度狼渊,但絲毫不影響我們使用它箱熬,要知道磨礪營(yíng)出來的學(xué)員,封裝個(gè)組件的能力狈邑,我說家常便飯的事城须,你可千萬不要覺得我在說大話,因?yàn)槭聦?shí)我們就是這樣做的米苹。
7糕伐、fresco圖片緩存組件
在上一個(gè)項(xiàng)目中我們同樣使用到了fresco組件,當(dāng)今Android世界最好用的圖片緩存組件蘸嘶,我們可以毫不吝嗇的這樣說良瞧,上次也給大家提到fresco是使用真正的三級(jí)緩存來實(shí)現(xiàn)的陪汽,兩級(jí)內(nèi)存一級(jí)磁盤,下面我們來解釋一下這個(gè)牛B的三級(jí)緩存:
(1)Bitmap緩存
Bitmap緩存存儲(chǔ)Bitmap對(duì)象褥蚯,這些Bitmap對(duì)象可以立刻用來顯示或者用于后處理挚冤,在5.0以下系統(tǒng),Bitmap緩存位于ashmem赞庶,這樣Bitmap對(duì)象的創(chuàng)建和釋放將不會(huì)引發(fā)GC训挡,更少的GC會(huì)使你的APP運(yùn)行得更加流暢。
5.0及其以上系統(tǒng)歧强,相比之下澜薄,內(nèi)存管理有了很大改進(jìn),所以Bitmap緩存直接位于Java的heap上摊册。當(dāng)應(yīng)用在后臺(tái)運(yùn)行時(shí)肤京,該內(nèi)存會(huì)被清空。
(2)未解碼圖片的內(nèi)存緩存
這個(gè)緩存存儲(chǔ)的是原始?jí)嚎s格式的圖片丧靡。從該緩存取到的圖片在使用之前蟆沫,需要先進(jìn)行解碼。如果有調(diào)整大小温治,旋轉(zhuǎn)饭庞,或者WebP編碼轉(zhuǎn)換工作需要完成,這些工作會(huì)在解碼之前進(jìn)行熬荆。APP在后臺(tái)時(shí)舟山,這個(gè)緩存同樣會(huì)被清空。
(3)和未解碼的內(nèi)存緩存相似卤恳,文件緩存存儲(chǔ)的是未解碼的原始?jí)嚎s格式的圖片累盗,在使用之前同樣需要經(jīng)過解碼等處理。
8突琳、banner組件
一個(gè)還不錯(cuò)的實(shí)現(xiàn)圖片輪播的組件若债,一個(gè)小組件而已,用用更健康拆融,就不多說了哈蠢琳。
9、LrcView
用于實(shí)現(xiàn)歌詞加載的組件镜豹,我們使用Jsoup從網(wǎng)絡(luò)上分析出歌詞傲须,再用okhttp下載后交給LrcView組件就可以了,用法也很簡(jiǎn)單趟脂,其實(shí)我想說的話泰讽,前面如何弄到歌詞更是難題,說多了都是淚啊,有興趣的童鞋可以單獨(dú)跟我交流交流吧已卸,這里就不細(xì)說了佛玄。
10、Vitamio組件
一個(gè)可以實(shí)現(xiàn)大多數(shù)音頻視頻播放咬最、流媒體播放的框架翎嫡,國(guó)人企業(yè)的產(chǎn)品欠动,當(dāng)然我們使用的是免費(fèi)版的永乌,用法和Android自帶的MediaPlayer大同小異。
其它小組件就一一介紹了具伍。
項(xiàng)目總結(jié):
本項(xiàng)目的特點(diǎn)是盡可能的少用Activity組件翅雏,大量使用Fragment及其嵌套實(shí)現(xiàn)UI界面,原因是播放器項(xiàng)目特殊性人芽,在大多數(shù)界面上都要保留播放控制條望几,F(xiàn)ragment之間的嵌套也會(huì)出現(xiàn)各種問題,但都給我們一一化解了萤厅,項(xiàng)目中成長(zhǎng)了不少橄抹,最經(jīng)典的一句話是:我們把Fragment及其接口回調(diào)運(yùn)用的淋漓盡致。還有就是各個(gè)界面的狀態(tài)同步問題惕味,當(dāng)然有了eventbus組件楼誓,一切的問題都不是問題了,在項(xiàng)目中我們使用了Service實(shí)現(xiàn)了后臺(tái)播放功能名挥,開啟服務(wù)與綁定服務(wù)結(jié)合使用的技巧疟羹,通知欄功能實(shí)現(xiàn),下載禀倔,收藏榄融,播放模式切換等,還有很多小功能實(shí)現(xiàn)救湖。最后的感受是:一個(gè)完整的項(xiàng)目開發(fā)愧杯,不僅讓你懂得了怎么運(yùn)用知識(shí),技巧和經(jīng)驗(yàn)的收獲才是更大的鞋既。