轉載自:http://stormzhang.com/opensource/2016/06/26/android-open-source-project-recommend1/android
推薦他的全部博文~git
圖片加載幾乎是任何 Android 項目中必備的需求,而圖片加載的開源庫也愈來愈多,咱們姑且在 GitHub 上搜索下 android image 關鍵字,出來的前五個按照 Star 數排序的項目以下:github
能夠看到前四個是你們比較熟知的圖片加載庫,有 UniversalImageLoader、Picasso、Fresco、Glide,至於第五個 ion 實際上是一個網絡庫,只不過也提供了圖片加載的功能,跟 Volley 相似,也提供圖片加載的功能,可是若是圖片加載是一個強需求的話,我更喜歡專一的庫,因此本文只討論單純的圖片加載庫。緩存
我相信你們很糾結到底該選擇哪個呢?貌似它們在GitHub上都有本身的一席之地,Star 數都蠻高的,確實很難抉擇,那麼今天我就來給你們分析下,圖片加載到底該怎麼選擇!網絡
https://github.com/nostra13/Android-Universal-Image-Loaderide
UIL能夠算是老牌最火的圖片加載庫了,使用過這個開源庫的項目能夠說是多的使人髮指,即便到如今 GitHub 上他的 Star 數仍然是衆多圖片加載庫最多的。性能
惋惜的是該做者在項目中說明,從去年的9月份,他就已經中止了對該項目的維護。這就意味着之後任何的 bug 都不會修復,任何的新特性都不會再繼續開發,因此毫無疑問 UIL 不推薦在項目中使用了。優化
https://github.com/square/picassocode
Picasso 是 Square 公司的大做,名字起的也這麼文藝,叫「畢加索」,意爲加載圖片就像畫畫同樣,是一門藝術。這個庫是我以前一直很喜歡的,由於他不只具有圖片加載應有盡有的強大功能,他的調用也是如此簡潔文藝:orm
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
以上代碼就是給一個 ImageView 加載遠程圖片的一個示例,是否是很簡潔?
固然不止如此,他還提供更多的用法,足以知足你實際項目中的各類需求,具體這些用法本文就不提了,能夠去官網自行研究。
https://github.com/bumptech/glide
Glide 是 Google 一位員工的大做,他徹底是基於 Picasso 的,沿襲了 Picasso 的簡潔風格,可是在此作了大量優化與改進。
Glide 默認的 Bitmap 格式是 RGB_565 格式,而 Picasso 默認的是 ARGB_8888 格式,這個內存開銷要小一半。
在磁盤緩存方面,Picasso 只會緩存原始尺寸的圖片,而 Glide 緩存的是多種規格,也就意味着 Glide 會根據你 ImageView 的大小來緩存相應大小的圖片尺寸,好比你 ImageView 大小是200200,原圖是 400400 ,而使用 Glide 就會緩存 200200 規格的圖,而 Picasso 只會緩存 400400 規格的。這個改進就會致使 Glide 比 Picasso 加載的速度要快,畢竟少了每次裁剪從新渲染的過程。
最重要的一個特性是 Glide 支持加載 Gif 動態圖,而 Picasso 不支持該特性。
除此以外,還有不少其餘配置選項的增長。
整體來講,Glide 是在 Picasso 基礎之上進行的二次開發,各個方面作了很多改進,不過這也致使他的包比 Picasso 大很多,不過也就不到 500k,Picasso 是100多k,方法數也比 Picasso 多很多,不過畢竟級別仍是蠻小的,影響不是很大。
https://github.com/facebook/fresco
Fresco 是 Facebook 出品,他是新一代的圖片加載庫,咱們知道 Android 應用程序可用的內存有限,常常會由於圖片加載致使 OOM,雖然咱們有各類手段去優化,儘可能減小出現 OOM 的可能性,可是永遠無法避免,尤爲某些低端手機 OOM 更是嚴重。而 Facebook 就另闢蹊徑,既然無法在 Java 層處理,咱們就在更底層的 Native 堆作手腳。因而 Fresco 將圖片放到一個特別的內存區域叫 Ashmem 區,就是屬於 Native 堆,圖片將再也不佔用 App 的內存,Java 層對此無能爲力,這裏是屬於 C++ 的地盤,因此能大大的減小 OOM。
因此此庫很強大,不過用起來也比較複雜,包也比較大,貌似有二、3M,底層涉及到的 C++ 領域,想讀源碼也比較困難。
綜合來看,毫無疑問 Glide 與 Picasso 之間優先推薦選擇 Glide,尤爲是若是你的項目想要支持 Gif 動態圖,那更該選擇 Glide 。
可是若是你的項目使用了 Square 公司的全家桶,如 Retrofit 或者 OkHttp ,那麼搭配 Picasso 一塊兒使用也不是不可,兼容性可能會更好些,佔用體積也會少些。
對於通常的 App 使用 Fresco 未免有些大材小用了,大部分狀況 Glide 都能知足你的需求了,可是若是你的 App 中大量使用圖片,好比是相似 Instagram 一類的圖片社交 App ,那麼推薦使用 Fresco ,雖然稍複雜,可是仍是推薦使用 Fresco ,對提高你 App 的性能與體驗有很多幫助,值得花時間去研究並應用到本身的 App 上來。