Android開發(fā)新手,若有錯誤請指出,謝謝~
架構選型
個人感覺現在的軟件開發(fā)已經主要靠合理的利用、組合各種輪子來滿足業(yè)務需求(沒有輪子就要自己造輪子)。
我使用的是 Retrofit + Fresco + RxJava + ButterKnife + Gson,相信Android開發(fā)人員對這些第三方庫都很熟悉,如果技能樹點的時其他路線的可以看這篇文章。
網絡請求
Retrofit的使用對于如今大行其道的RESTFUL的API來說簡直就是舒服的不能再舒服了,記得在某處看到過一句話:
如果后臺使用標準的Restful API,那么使用Retrofit來處理網絡請求,網絡請求相關的代碼量將減少80%
Android網絡請求庫根據谷歌官方推薦即可,前段時間是Volley,現在是okHttp,使用Retrofit時默認選取okHttp作為底層網絡請求實現。
圖片加載
圖片加載庫算是比較難以取舍的,之前流行的是UIL,而現在是Glide、Picasso和Fresco,在本人的Github庫中使用后三者方式加載圖片,可以看出三種都能較好滿足需求,但同時也能明顯感覺到Fresco的響應最快,并且Fresco支持的功能最多。有利就會有弊,Glide和Picasso都是可以直接依賴普通的ImageView進行使用,而Fresco則需要使用其自定義的SimpleDraweeView及其相關屬性對ImageView進行操作,如scaleType等屬性。對于沒有特殊要求或限制的項目,本人建議使用Fresco作為圖片加載庫。
RxJava
使用RxJava處理復雜的異步邏輯可以說是異常的舒服,看著之前用Handler實現功能的代碼簡直慘不忍睹。以一個簡單的Banner(圖片輪播)為例,使用RxJava實現無論從代碼量還是邏輯上都是更加精簡、清晰。使用timer、map、flatMap等各種操作符,非常容易實現想要的異步功能。其實之前的網絡訪問、圖片加載只需要自己封裝一層,即可按照自己舒服(習慣)的方式進行操作,而RxJava則是一種獨立的編程風格,剛開始接觸可能還需要適應一段時間,本人用了2個月感覺仍在磨合期,但卻是義無反顧的推薦用其處理異步邏輯。并且,RxJava可以和Retrofit無縫鏈接,直接異步請求接收數據,回調后進行一系列的異步處理,并能夠智能各處理步驟所處的線程,UI的歸UI、計算的歸計算、IO的歸IO,大大提升App的流暢度。
其他使用
- ButterKnife的功能很單一,就是通過自定義注解的方式綁定控件ID、點擊事件等,但卻非常好用,配合Android Studio的插件,幾乎是最常用的操作之一。
- Gson作為google官方的json解析庫,靈巧好用,無副作用。json解析庫無論選擇哪種感覺都可以充分滿足需求。
- RecyclerView已經可以完全替代ListView和GridView,現在項目中所有列表的實現都可以基于RecyclerView。
未使用
- EventBus 事件總線 未詳細了解,不評論
- Dagger2 依賴注入 未詳細了解,不評論
- MVP/MVVM 不喜歡(個人觀點),與后臺千篇一律的邏輯不通(數據庫 + 增刪改查 + 組合業(yè)務邏輯),App中有許多比較特殊的用戶交互,而使用MV*這種形式確實可以規(guī)范代碼,但其帶來的大量的中間層代碼(冗余的文件、類、方法)是我極為排斥的。Android本身的Activity、Fragment、View、Adapter只要合理組織、運用,一樣能夠實現較好的易維護的代碼。
總結
個人對架構的理解、甚至對編程的理解就是盡量少寫代碼,或者短期內看上去會增加些代碼量,但長期會減少正體的代碼量。目前,Android開發(fā)仍是軟件開發(fā)最熱的部分之一,雖然已有許多成熟的框架給我們使用,但仍有更大量的需求待大家完善、開發(fā)(指開源、成熟的解決方案),如復雜動畫的實現。本篇文章主要介紹自己在這個項目中使用到的第三方庫,希望能夠幫助大家。