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