http://stormzhang.com/opensource/2016/06/26/android-open-source-project-recommend1/

轉載自: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 數都蠻高的,確實很難抉擇,那麼今天我就來給你們分析下,圖片加載到底該怎麼選擇!網絡

1. UniversalImageLoader

https://github.com/nostra13/Android-Universal-Image-Loaderide

UIL能夠算是老牌最火的圖片加載庫了,使用過這個開源庫的項目能夠說是多的使人髮指,即便到如今 GitHub 上他的 Star 數仍然是衆多圖片加載庫最多的。性能

惋惜的是該做者在項目中說明,從去年的9月份,他就已經中止了對該項目的維護。這就意味着之後任何的 bug 都不會修復,任何的新特性都不會再繼續開發,因此毫無疑問 UIL 不推薦在項目中使用了。優化

2. Picasso

https://github.com/square/picassocode

Picasso 是 Square 公司的大做,名字起的也這麼文藝,叫「畢加索」,意爲加載圖片就像畫畫同樣,是一門藝術。這個庫是我以前一直很喜歡的,由於他不只具有圖片加載應有盡有的強大功能,他的調用也是如此簡潔文藝:orm

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

以上代碼就是給一個 ImageView 加載遠程圖片的一個示例,是否是很簡潔?

固然不止如此,他還提供更多的用法,足以知足你實際項目中的各類需求,具體這些用法本文就不提了,能夠去官網自行研究。

3. Glide

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 多很多,不過畢竟級別仍是蠻小的,影響不是很大。

4. Fresco

https://github.com/facebook/fresco

Fresco 是 Facebook 出品,他是新一代的圖片加載庫,咱們知道 Android 應用程序可用的內存有限,常常會由於圖片加載致使 OOM,雖然咱們有各類手段去優化,儘可能減小出現 OOM 的可能性,可是永遠無法避免,尤爲某些低端手機 OOM 更是嚴重。而 Facebook 就另闢蹊徑,既然無法在 Java 層處理,咱們就在更底層的 Native 堆作手腳。因而 Fresco 將圖片放到一個特別的內存區域叫 Ashmem 區,就是屬於 Native 堆,圖片將再也不佔用 App 的內存,Java 層對此無能爲力,這裏是屬於 C++ 的地盤,因此能大大的減小 OOM。

因此此庫很強大,不過用起來也比較複雜,包也比較大,貌似有二、3M,底層涉及到的 C++ 領域,想讀源碼也比較困難。

5. 總結

綜合來看,毫無疑問 Glide 與 Picasso 之間優先推薦選擇 Glide,尤爲是若是你的項目想要支持 Gif 動態圖,那更該選擇 Glide 。

可是若是你的項目使用了 Square 公司的全家桶,如 Retrofit 或者 OkHttp ,那麼搭配 Picasso 一塊兒使用也不是不可,兼容性可能會更好些,佔用體積也會少些。

對於通常的 App 使用 Fresco 未免有些大材小用了,大部分狀況 Glide 都能知足你的需求了,可是若是你的 App 中大量使用圖片,好比是相似 Instagram 一類的圖片社交 App ,那麼推薦使用 Fresco ,雖然稍複雜,可是仍是推薦使用 Fresco ,對提高你 App 的性能與體驗有很多幫助,值得花時間去研究並應用到本身的 App 上來。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息