Android的開發之&論圖片加載Glide、Fresco、Picasso、ImageLoader特點和優缺點

Glide圖片加載框架
一,簡介:
Glide是一款谷歌官方推薦使用的強大圖片加載框架作者是bumptech,這個庫被廣泛運用在谷歌的開源項目中。

二,功能特點:
1,圖片異步加載,設置加載尺寸,設置加載動畫,設置加載中和加載失敗的圖片,加載的圖片格式豐富:JPG,PNG,GIF,WEBP支持設置縮略圖
2,加載的圖片路徑多種:網絡本地資源assets等
3,緩存特點:跳過內存緩存,緩存動態清理,設置緩存策略
4,其他特點:生命週期集成,設置動態轉換,設置下載優先級

三:磁盤緩存策略

Glide磁盤緩存策略分爲四種,默認的是結果:

1.所有:緩存原圖(SOURCE)和處理圖(RESULT)
2.NONE:什麼都不緩存
3.SOURCE:只緩存原圖(SOURCE)
4.RESULT:只緩存處理圖(RESULT) - 默認值
組合策略和其他三級緩存一樣,滑翔的緩存讀取順序是
內存(使用LRU算法) - >磁盤(使用弱引用緩存正在使用的資源) - >網絡

四,優點與缺點:
優點:
1,使用簡單,可配置度高,自適應程度高
2,多樣化媒體加載:Glide不僅是一個圖片緩存,支持常見的圖片格式jpg png gif webp
3,生命週期集成:根據Activity/fragment生命週期自動管理請求
將Activity/Fragment作爲with()參數的好處是:圖片加載會和Activity/Fragment的生命週期保持一致,比如Paused狀態在暫停加載,在Resumed的時候又自動重新加載
4,高效的緩存策略
(1)支持Memory和Disk圖片緩存
(2)Picasso緩存的是全尺寸的,而Glide緩存的是跟ImageView尺寸相同的
(3)內存開銷小,Glide加載的圖片質量要差於Picasso,因爲Glide默認的Bitmap格式是RGB_565 ,比ARGB_8888格式的內存開銷要小一半。
(4)高效處理bitmap,使用bitmap pool使bitmap複用,主動調用recycle回收需要回收的bitmap,減少系統回收壓力
5圖片緩存->媒體緩存
6支持優先級處理
7支持 okhttp、Volley
缺點
(1)使用方法複雜
(2)由於Glide其功能強大,所以使用的方法非常多,其源碼也相對的複雜
(3)包較大


Fresco圖片加載框架
一,簡介:
Fresco是Facebook的最新推出的一款用於Android的應用中展示圖片的強大圖片庫。

二,主要特點:
(1)兩個內存緩存加上本地緩存構成了三級緩存
(2)漸進式呈現圖片
(3)支持加載的Gif圖和WebP的格式

三,主要功能:
帶進度條的圖片,圖片的不同裁剪,圓形和圓角圖片,漸進式展示圖片,GIF動畫圖片,多圖請求及圖片複用,圖片加載監聽,圖片縮放和旋轉,修改圖片和動態展示圖片等功

四,優點與缺點:
優點: 
(1)內存自動回收。圖片不可見時,會及時自動釋放所佔用的內存,儘可能地避免OOM 
(2)三級緩存機制。兩級內存緩存(解碼的與未解碼的)+一級磁盤緩存,提升加載速度,節省內存佔用空間 
(3)支持各種加載場景。如動圖加載,高斯模糊等常見的圖片加載場景。另外還提供了獨特的漸進式加載,先加載小圖再加載大圖,加載進度等功能(很強大) 。
缺點: 
(1)框架較大,影響Apk體積 
(2)侵入性較強。須使用它提供的SimpleDraweeView來代替ImageView的加載顯示圖片

Picasso圖片加載框架

一,簡介:
PicassoSquare公司出品的一個強大的圖片下載和緩存圖片庫

二,Picasso特點和功能
1、Picasso是全尺寸下載圖片
2、Picasso默認的緩存格式爲ARGB_888
3、鏈式調用,使用簡單;
4、具有一般圖片框架的基礎功能;
5、方便的圖片轉換;(圖片高斯模糊,添加圓角,做度灰處理,圓形圖片)
6、加載過程監聽和錯誤處理;
7、自動添加磁盤和內存二級緩存;
8、支持多種數據源加載。
9、Picasso默認不支持Gif圖片加載。Picasso庫很小,類也很少,庫僅118KB大小。
10、Picasso支持調試和日誌


三:Picasso緩存策略
1、緩存(Disk and Memory):Picasso有內存緩存(Memory)和磁盤緩存(Disk)
(1)LRU內存緩存爲可用應用程序RAM的15%
(2)2%存儲空間的磁盤緩存高達50MB但不低於5MB。
(3)三個用於磁盤和網絡訪問的下載線程。
2、Picasso內存緩存是使用的LRU策略的緩存實現:
memory(內存)-> disk(磁盤)-> network(網上)。
默認情況下,Picasso內存緩存和磁盤緩存都開啓了的,
3、Picasso提供了設置緩存策略的方法。
1、memoryPolicy設置內存緩存策略
NO_CACHE:表示處理請求的時候跳過檢查內存緩存
NO_STORE:表示請求成功之後,不會最終的結果存到內存。
2、networkPolicy設置磁盤緩存策略
NO_CACHE:表示處理請求的時候跳過處理磁盤緩存
NO_STORE:表示請求成功後,不會結果緩存到Disk,但是這個只對OkHttp有效 。OFFLINE:Picasso會強制這次請求從緩存中獲取結果,不會發起網絡請求,不管緩存中能否獲取到結果。

四:Picasso解決了android中加載圖片時需要解決的一些常見問題:
1、在adapter中需要取消已經不在視野範圍的ImageView圖片資源的加載,否則會導致圖片錯位,Picasso已經解決了這個問題。
2、使用複雜的圖片壓縮轉換來儘可能的減少內存消耗
3、自帶內存和硬盤二級緩存功能

五:缺點:
不支持 GIF, 緩存的圖片未縮放, 並且默認使用,使用ARGB_8888緩存圖片, 緩存體積大.

六:Picasso和Glide對比的優缺點
1.Picasso和Glide的withi後面的參數不同
(1)Picasso.with(這裏只能傳入上下文)     .
(2)Glide.with(可以傳context,activity,fragment)
2.加載後圖片質量不同(Picasso:ARGB-8888,Glide:RGB-565)
3.加載Gif圖片(Picasso不能加載Gif圖片,Glide可以加載Gif圖片)
4.緩存策略和加載速度.
(1)Picasso緩存的是全尺寸,而 Glide的緩存的更ImageView的尺寸相同.
(2)調整ImageView大小,Picasso只緩存一個全尺寸,Glide則會爲每種大小都緩存一次.


ImageLoader圖片加載框架
一:簡介:
ImageLoader 是最早開源的 Android 圖片緩存庫, 強大的緩存機制, 早期使用這個圖片加載框架的Android應用非常多。

二:特點和功能:
(1).使用多線程加載圖片(數據源可以是網絡,本地,資源,assets
(2).靈活配置ImageLoader的基本參數,包括線程數、圖片下載器,內存緩存策略,硬盤緩存策略、緩存方式、圖片顯示選項等;
(3).圖片異步加載緩存機制,包括內存緩存及SDCard緩存;
(4).採用監聽器監聽圖片加載過程及相應事件的處理;
(5).配置加載的圖片顯示選項,比如圖片的圓角處理及漸變動畫。
  1. 根據控件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap佔用過多的內存
  2. 提供在較慢的網絡下對圖片進行加載
三:緩存策略
Imageloader內存緩存策略
(1)只使用的是強引用緩存 
LruMemoryCache(默認的內存緩存類,緩存的是bitmap的強引用)
(2)使用強引用和弱引用相結合的緩存有
UsingFreqLimitedMemoryCache(緩存的圖片總量超過限定值,刪除使用頻率最小的bitmap)
LRULimitedMemoryCache(使用的lru算法,和LruMemoryCache不同的是他緩存的是bitmap的弱引用)
FIFOLimitedMemoryCache(先進先出的緩存策略,當超過設定值,先刪除最先加入緩存的bitmap)
LargestLimitedMemoryCache(當超過緩存限定值,先刪除最大的bitmap對象)
LimitedAgeMemoryCache(當 bitmap加入緩存中的時間超過我們設定的值,將其刪除)
(3)只使用弱引用緩存
WeakMemoryCache(緩存bitmap的總大小沒有限制,不足就是不穩定,緩存的圖片容易被回收)
Imageloader硬盤緩存
FileCountLimitedDiscCache(設定緩存圖片的個數,超過設定值,刪除掉最先加入到硬盤的文件)
LimitedAgeDiscCache(設定文件存活的最長時間,當超過這個值,就刪除該文件)
TotalSizeLimitedDiscCache(設定緩存bitmap的最大值,當超過這個值,刪除最先加入到硬盤的文件)
UnlimitedDiscCache(這個緩存類沒有任何的限制)

優點:
(1) 支持下載進度監聽
(2) 可以在 View 滾動中暫停圖片加載
通過 PauseOnScrollListener 接口可以在 View 滾動中暫停圖片加載。
(3) 默認實現多種內存緩存算法 這幾個圖片緩存都可以配置緩存算法,不過 ImageLoader 默認實現了較多緩存算法,如 Size 最大先刪除、使用最少先刪除、最近最少使用、先進先刪除、時間最長先刪除等。
(4) 支持本地緩存文件名規則定義

缺點:
不支持GIF圖片加載, 使用稍微繁瑣, 並且緩存機制沒有和http的緩
存很好的結合, 完全是自己的一套緩存機制(完整大小).

總結:最後放一張網絡上找的圖片


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章