Android開(kāi)發(fā)新手滑潘,若有錯(cuò)誤請(qǐng)指出薪夕,謝謝~
架構(gòu)選型
個(gè)人感覺(jué)現(xiàn)在的軟件開(kāi)發(fā)已經(jīng)主要靠合理的利用容为、組合各種輪子來(lái)滿足業(yè)務(wù)需求(沒(méi)有輪子就要自己造輪子)壁却。
我使用的是 Retrofit + Fresco + RxJava + ButterKnife + Gson,相信Android開(kāi)發(fā)人員對(duì)這些第三方庫(kù)都很熟悉阳懂,如果技能樹(shù)點(diǎn)的時(shí)其他路線的可以看這篇文章梅尤。
網(wǎng)絡(luò)請(qǐng)求
Retrofit的使用對(duì)于如今大行其道的RESTFUL的API來(lái)說(shuō)簡(jiǎn)直就是舒服的不能再舒服了,記得在某處看到過(guò)一句話:
如果后臺(tái)使用標(biāo)準(zhǔn)的Restful API希太,那么使用Retrofit來(lái)處理網(wǎng)絡(luò)請(qǐng)求,網(wǎng)絡(luò)請(qǐng)求相關(guān)的代碼量將減少80%
Android網(wǎng)絡(luò)請(qǐng)求庫(kù)根據(jù)谷歌官方推薦即可酝蜒,前段時(shí)間是Volley誊辉,現(xiàn)在是okHttp,使用Retrofit時(shí)默認(rèn)選取okHttp作為底層網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)亡脑。
圖片加載
圖片加載庫(kù)算是比較難以取舍的堕澄,之前流行的是UIL,而現(xiàn)在是Glide霉咨、Picasso和Fresco蛙紫,在本人的Github庫(kù)中使用后三者方式加載圖片,可以看出三種都能較好滿足需求途戒,但同時(shí)也能明顯感覺(jué)到Fresco的響應(yīng)最快坑傅,并且Fresco支持的功能最多。有利就會(huì)有弊喷斋,Glide和Picasso都是可以直接依賴普通的ImageView進(jìn)行使用唁毒,而Fresco則需要使用其自定義的SimpleDraweeView及其相關(guān)屬性對(duì)ImageView進(jìn)行操作蒜茴,如scaleType等屬性。對(duì)于沒(méi)有特殊要求或限制的項(xiàng)目浆西,本人建議使用Fresco作為圖片加載庫(kù)粉私。
RxJava
使用RxJava處理復(fù)雜的異步邏輯可以說(shuō)是異常的舒服,看著之前用Handler實(shí)現(xiàn)功能的代碼簡(jiǎn)直慘不忍睹近零。以一個(gè)簡(jiǎn)單的Banner(圖片輪播)為例诺核,使用RxJava實(shí)現(xiàn)無(wú)論從代碼量還是邏輯上都是更加精簡(jiǎn)、清晰久信。使用timer窖杀、map、flatMap等各種操作符入篮,非常容易實(shí)現(xiàn)想要的異步功能陈瘦。其實(shí)之前的網(wǎng)絡(luò)訪問(wèn)、圖片加載只需要自己封裝一層潮售,即可按照自己舒服(習(xí)慣)的方式進(jìn)行操作痊项,而RxJava則是一種獨(dú)立的編程風(fēng)格,剛開(kāi)始接觸可能還需要適應(yīng)一段時(shí)間酥诽,本人用了2個(gè)月感覺(jué)仍在磨合期鞍泉,但卻是義無(wú)反顧的推薦用其處理異步邏輯。并且肮帐,RxJava可以和Retrofit無(wú)縫鏈接咖驮,直接異步請(qǐng)求接收數(shù)據(jù),回調(diào)后進(jìn)行一系列的異步處理训枢,并能夠智能各處理步驟所處的線程托修,UI的歸UI、計(jì)算的歸計(jì)算恒界、IO的歸IO睦刃,大大提升App的流暢度。
其他使用
- ButterKnife的功能很單一十酣,就是通過(guò)自定義注解的方式綁定控件ID涩拙、點(diǎn)擊事件等,但卻非常好用耸采,配合Android Studio的插件兴泥,幾乎是最常用的操作之一。
- Gson作為google官方的json解析庫(kù)虾宇,靈巧好用搓彻,無(wú)副作用。json解析庫(kù)無(wú)論選擇哪種感覺(jué)都可以充分滿足需求。
- RecyclerView已經(jīng)可以完全替代ListView和GridView好唯,現(xiàn)在項(xiàng)目中所有列表的實(shí)現(xiàn)都可以基于RecyclerView竭沫。
未使用
- EventBus 事件總線 未詳細(xì)了解,不評(píng)論
- Dagger2 依賴注入 未詳細(xì)了解骑篙,不評(píng)論
- MVP/MVVM 不喜歡(個(gè)人觀點(diǎn))蜕提,與后臺(tái)千篇一律的邏輯不通(數(shù)據(jù)庫(kù) + 增刪改查 + 組合業(yè)務(wù)邏輯),App中有許多比較特殊的用戶交互靶端,而使用MV*這種形式確實(shí)可以規(guī)范代碼谎势,但其帶來(lái)的大量的中間層代碼(冗余的文件、類杨名、方法)是我極為排斥的脏榆。Android本身的Activity、Fragment台谍、View须喂、Adapter只要合理組織、運(yùn)用趁蕊,一樣能夠?qū)崿F(xiàn)較好的易維護(hù)的代碼坞生。
總結(jié)
個(gè)人對(duì)架構(gòu)的理解、甚至對(duì)編程的理解就是盡量少寫(xiě)代碼掷伙,或者短期內(nèi)看上去會(huì)增加些代碼量是己,但長(zhǎng)期會(huì)減少正體的代碼量。目前任柜,Android開(kāi)發(fā)仍是軟件開(kāi)發(fā)最熱的部分之一卒废,雖然已有許多成熟的框架給我們使用,但仍有更大量的需求待大家完善宙地、開(kāi)發(fā)(指開(kāi)源摔认、成熟的解決方案),如復(fù)雜動(dòng)畫(huà)的實(shí)現(xiàn)宅粥。本篇文章主要介紹自己在這個(gè)項(xiàng)目中使用到的第三方庫(kù)参袱,希望能夠幫助大家。