Picasso,Glide,Fresco那個好?


前言:在Android開發中,圖片加載OOM一直困擾着很多開發者,在各種不合理的設計之下也容易導致圖片加載OOM的問題,目前開源的比較常用的圖片加載庫也很多,比如老牌的UIL,Volley,AQuery還有比較優秀的Picasso,Glide,Fresco等.
本文僅簡單地比較Fresco&Glide&Picasoo,如有錯誤還請斧正.

Picasso

由Square公司開源的一款圖片加載和緩存的庫,不過Picasso不支持磁盤緩存.也就是說如果想要做磁盤緩存的話需要另外想辦法.(可以利用JakeWharton/DiskLruCache)

Glide

一款和Picasso類似的圖片加載和緩存的開源庫.雖然在函數定義和調用上和Picasso相差無幾,但是Glide確實在性能方面比Picasso要好,值得注意的是Glide庫僅支持Android 2.3.3及以上的版本.(PS:目前市面上貌似也很少看到Android 4.1以下的機型了,所以版本向下兼容可以不用擔心.)

關於Glide和Picasso的比較文章推薦:
Introduction to Glide, Image Loader Library for Android, recommended by Google

Fresco

一款由Facebook今年推出的一個強大的圖片加載庫,Fresco 中設計有一個叫做 image pipeline 的模塊。它負責從網絡,從本地文件系統,本地資源加載圖片。為了最大限度節省空間和CPU時間,它含有3級緩存設計(2級內存,1級文件)。Fresco 中設計有一個叫做 Drawees 模塊,方便地顯示loading圖,當圖片不再顯示在屏幕上時,及時地釋放內存和空間占用。Fresco 支持 Android2.3(API level 9) 及其以上系統。(摘自:http://fresco-cn.org/)
有關Fresco的使用教程請繞道:http://fresco-cn.org/docs/index.html#_

Fresco相比其他圖片庫如Picasso,UIL,Glide相比,所具有的最重要的幾個獨有特性:

  • 在Android 5.0以下系統,圖片不存儲在Java heap,而是存儲在ashmemheap,中間的字節buffer同樣位於native heap。使應用有更多內存空間,降低OOM風險,減少GC次數。
    漸進式的JPEG呈現。
  • 圖片可以在任意點進行裁剪,而不是中心,即自定義居中焦點。
  • JPEG可以在native進行resize,避免了在縮小圖片時的OOM風險。
  • 支持Gif和WebP。

Fresco&Glide&Picasso 比較

Facebook也提供了,關於Fresco和其他圖片加載器的比較例子.下載地址:Fresco

加載本地圖片:
Fresco&Glide&Picasso
由於圖片數量比較少,很難看出差別,不過可以發現,在一般的情況下,Fresco和Glide在內存占用上,Fresco更優,這是由於Fresco將圖片放置到一塊特殊的Native內存,這塊內存的管理是由Fresco進行的,所以Fresco的體積比較龐大,會為應用增加接近2M的體積,這算是Fresco的一個缺點.

加載網絡圖片: 
net
在加載網絡圖片時,由於機型和網絡環境不同,可能也會導致現實的數據有問題,不過在比較的時候,可以發現,Fresco在加載網絡圖片時,剛開始Heap內存占用也是58M左右,不過隨着時間的推移,Heap內存占用的值會變大,可能是由於Fresco內存釋放存在問題導致的.可見Fresco雖然在加載圖片上獨辟蹊徑但是並沒有傳說中那么完美.

圖片加載庫的選擇

根據自己平時在項目中的體會,在綜合包的大小及圖片加載器的穩定性后覺得Glide是比較適合用在產品中的圖片加載庫.
選擇的原因如下:

  1. Glide默認提供配置支持本地圖片緩存,緩存的機制是DiskLruCache.可以根據自己的需要,自定義圖片緩存的路徑.所以在考慮節省用戶流量來看可以不考慮Picasso;
  2. 雖然Fresco也提供更強大的圖片緩存和加載機制,不過在比較之后,感覺Fresco還是有待完善.Glide可以很簡單的獲取網絡圖片的Bitmap對象,而Fresco需要通過訂閱數據源克隆Bitmap對象的引用才能存儲值.操作方式不夠簡潔和友好.
  3. Fresco的庫文件中,以最新的0.8.1為例,imagepipeline-0.8.1.aar光包得大小就有3.5M ,而Glide包的大小為465K為了讓Apk包得體積更小,所以考慮使用Glide.
推薦:Android中實用的Gradle配置 http://www.apkbus.com/blog-705730-61441.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM