手上項目完成后,筆者開始總結開發過程中走的彎路,最大的感觸是:你對Github了解越多,你需要做的就越少。在這里推薦一些十分常用的庫,希望讀者朋友們能少走些彎路。
UniversalImageLoader
Android SDK的特點是開放、簡單、基礎,你可以在上面自由創造,但現成的東西就很少了,比如剛開始接觸Android的時筆者驚訝於ImageView竟然不能設置來源一張網絡圖片甚至SD卡上的圖片作為來源,對於習慣了前端開發的人這確實難以接收,后來理解到圖片的下載、緩存、解碼、錯誤處理、縮放裁剪這里面每個環節都會有很多種情況,如果單純地設置一個src屬性就將其靈活性局限了,此外ImageView畢竟是一個視圖類,做一些I/O、耗資源的粗活還得自己管理線程也不合適,也就接受了這種“自己動手豐衣足食”的理念。
所以在之前的項目開發中真的就自己動手實現了一個叫RemoteImageDownloader的類,其中歷經曲折真是不堪回首,既考慮到相同URL同時只下載一次、緩存、錯誤和重試機制,又要考慮到多個請求時如何管理隊列,更痛苦的是還得防止同時解碼多個圖片、必要時downsample以防內存超過限制……在整個開發過程中不斷為其添磚加瓦,直到完善后才發現Github上有一款叫做UniversalImageLoader的庫,真是相見恨晚、淚流滿面啊,幾乎又做了一個RemoteImageDownloader,雖然對於項目來說它更符合應用場景,但讓項目來適應這個穩定、專人維護且被眾多主流應用使用的庫顯然是更明智的選擇。
參考地址:https://github.com/nostra13/Android-Universal-Image-Loader
Android Asynchronous Http Client
如果你開發的項目需要調用Restful API,那一定離不了異步HTTP請求、持久化Cookie存儲、處理多文件上傳、GZIP壓縮和各種I/O錯誤處理。異步請求通過AsyncTask可以解決,但線程不好管理,所以更常見的是Thread+Handler的模式,通過定義不同的Message來區分處理成功請求、連接超時、無法連接到網絡、服務器繁忙,在RequestHeader中自動加上GzipHeader,同時給OutputSteram自動套上GzipOutputStream,根據參數類型去組織Multipart或普通POST、用Preference去固化存儲Cookie等等,將它們全部封裝在一起,筆者就打造了一個名為ApiRequest類HTTP處理類,也是隨着項目的進展不斷完善添磚加瓦,包括引入Activity Based的概念以便在finish activity之后就自動關閉連接等特性。再后來發生的事情想必大家都知道了:有一天遇到了Android Asynchronous Http Client,這款Instagram、Pinterest都在用的庫,再一次讓我欲哭無淚,因為ApiRequest里特性功能,幾乎都能找到。
參考地址:https://github.com/loopj/android-async-http
Pull To Refresh
下拉刷新,最具移動特色的交互方式。如果僅僅局限於Pull To Refresh Listview那就太狹隘了,事實上Webview、ScrollView、GridView都是可以下拉刷新的,這就是Android Pull-to-refresh庫給我們帶來的UI組件,它在github上收獲了2700顆Star。這款插件筆者是直接拿來就用了,沒有重蹈覆轍(目測就算做來了體驗也不好),但還是在這里推薦給大家,因為確實太好用了。
參考地址:https://github.com/chrisbanes/Android-PullToRefresh
Gifview
Android的ImageView是沒法顯示Gif圖片的,要顯示動圖還是略費周折。為了顯示動圖,筆者繼承了ImageView,加了setGifFile方法,通過Movie來解析Gif圖片,並且不斷地重繪、繪制時計算時間以調整幀數從而實現動圖的功能,這倒沒什么難的,大伙兒貌似都這么干的。但是,后來在測試的時候發現很多在很多機器上Movie解析Gif都失敗了,原因不詳也沒有深究,就在網上找到了Gifview,效果很棒,雖然有些耗內存造成gc時卡頓,但能顯示動圖已經滿足了。值得一提的是,Gifview的作者是中國的。
參考地址:https://code.google.com/p/gifview
AndroidTouchGallery
Pinch to zoom、flip to navigate,如果你的項目包含Gallery、這些特性是必不可少的,這方面的庫倒是不少,筆者用的AndroidTouchGallery感覺就很實用、體驗也不錯,不過通用性倒不是太好,可能要做一些修改才能與你的項目融合,比如將Gifview、ImageLoader以及HttpClient相關的都整合進去,也需要費些心思的。
參考地址:https://github.com/Dreddik/AndroidTouchGallery
Android Support v4
這個Google官方的庫真是活力十足,ViewPager、Fragment等新特性也能在ICS以下SDK使用了,省了很多力氣。
本來筆者想過把重復造的輪子也放到Github上與大家分享,但考慮到沒有太多時間去維護、而且設計上缺乏一定通用性等因素便打消了這個念頭。
以上是自己覺得非常實用的庫,如果讀者朋友還有什么補充,歡迎評論交流。