Universal-ImageLoader,Picasso,F(xiàn)resco,Glide對(duì)比
Universal-ImageLoader:(估計(jì)由于HttpClient被Google放棄,作者就放棄維護(hù)這個(gè)框架)
優(yōu)點(diǎn):
1.支持下載進(jìn)度監(jiān)聽(tīng)
2.可以在 View 滾動(dòng)中暫停圖片加載,通過(guò) PauseOnScrollListener 接口可以在 View 滾動(dòng)中暫停圖片加載。
3.默認(rèn)實(shí)現(xiàn)多種內(nèi)存緩存算法 這幾個(gè)圖片緩存都可以配置緩存算法,不過(guò) ImageLoader 默認(rèn)實(shí)現(xiàn)了較多緩存算法,如 Size 最大先刪除、使用最少先刪除、最近最少使用、先進(jìn)先刪除、時(shí)間最長(zhǎng)先刪除等。
4.支持本地緩存文件名規(guī)則定義
Picasso 優(yōu)點(diǎn)
1. 自帶統(tǒng)計(jì)監(jiān)控功能。支持圖片緩存使用的監(jiān)控,包括緩存命中率、已使用內(nèi)存大小、節(jié)省的流量等。
2.支持優(yōu)先級(jí)處理。每次任務(wù)調(diào)度前會(huì)選擇優(yōu)先級(jí)高的任務(wù),比如 App 頁(yè)面中 Banner 的優(yōu)先級(jí)高于 Icon 時(shí)就很適用。
3.支持延遲到圖片尺寸計(jì)算完成加載
4.支持飛行模式、并發(fā)線程數(shù)根據(jù)網(wǎng)絡(luò)類型而變。 手機(jī)切換到飛行模式或網(wǎng)絡(luò)類型變換時(shí)會(huì)自動(dòng)調(diào)整線程池最大并發(fā)數(shù),比如 wifi 最大并發(fā)為 4,4g 為 3,3g 為 2。 這里 Picasso 根據(jù)網(wǎng)絡(luò)類型來(lái)決定最大并發(fā)數(shù),而不是 CPU 核數(shù)。
5.“無(wú)”本地緩存。無(wú)”本地緩存,不是說(shuō)沒(méi)有本地緩存,而是 Picasso 自己沒(méi)有實(shí)現(xiàn),交給了 Square 的另外一個(gè)網(wǎng)絡(luò)庫(kù) okhttp 去實(shí)現(xiàn),這樣的好處是可以通過(guò)請(qǐng)求 Response Header 中的 Cache-Control 及 Expired 控制圖片的過(guò)期時(shí)間。
Fresco 是 Facebook 推出的開(kāi)源圖片緩存工具,主要特點(diǎn)包括:兩個(gè)內(nèi)存緩存加上 Native 緩存構(gòu)成了三級(jí)緩存,
優(yōu)點(diǎn):
1. 圖片存儲(chǔ)在安卓系統(tǒng)的匿名共享內(nèi)存, 而不是虛擬機(jī)的堆內(nèi)存中, 圖片的中間緩沖數(shù)據(jù)也存放在本地堆內(nèi)存, 所以, 應(yīng)用程序有更多的內(nèi)存使用, 不會(huì)因?yàn)閳D片加載而導(dǎo)致oom, 同時(shí)也減少垃圾回收器頻繁調(diào)用回收 Bitmap 導(dǎo)致的界面卡頓, 性能更高。
2. 漸進(jìn)式加載 JPEG 圖片, 支持圖片從模糊到清晰加載。
3. 圖片可以以任意的中心點(diǎn)顯示在 ImageView, 而不僅僅是圖片的中心。
4. JPEG 圖片改變大小也是在 native 進(jìn)行的, 不是在虛擬機(jī)的堆內(nèi)存, 同樣減少 OOM。
5. 很好的支持 GIF 圖片的顯示。
缺點(diǎn):
1. 框架較大, 影響 Apk 體積
2. 使用較繁瑣
Glide 優(yōu)點(diǎn)
1. 不僅僅可以進(jìn)行圖片緩存還可以緩存媒體文件。Glide 不僅是一個(gè)圖片緩存,它支持 Gif、WebP、縮略圖。甚至是 Video,所以更該當(dāng)做一個(gè)媒體緩存。
2. 支持優(yōu)先級(jí)處理。
3. 與 Activity/Fragment 生命周期一致,支持 trimMemory。Glide 對(duì)每個(gè) context 都保持一個(gè) RequestManager,通過(guò) FragmentTransaction 保持與 Activity/Fragment 生命周期一致,并且有對(duì)應(yīng)的 trimMemory 接口實(shí)現(xiàn)可供調(diào)用。
4. 支持 okhttp、Volley。Glide 默認(rèn)通過(guò) UrlConnection 獲取數(shù)據(jù),可以配合 okhttp 或是 Volley 使用。實(shí)際 ImageLoader、Picasso 也都支持 okhttp、Volley。
5. 內(nèi)存友好。Glide 的內(nèi)存緩存有個(gè) active 的設(shè)計(jì),從內(nèi)存緩存中取數(shù)據(jù)時(shí),不像一般的實(shí)現(xiàn)用 get,而是用 remove,再將這個(gè)緩存數(shù)據(jù)放到一個(gè) value 為軟引用的 activeResources map 中,并計(jì)數(shù)引用數(shù),在圖片加載完成后進(jìn)行判斷,如果引用計(jì)數(shù)為空則回收掉。內(nèi)存緩存更小圖片,Glide 以 url、view_width、view_height、屏幕的分辨率等做為聯(lián)合 key,將處理后的圖片緩存在內(nèi)存緩存中,而不是原始圖片以節(jié)省大小與 Activity/Fragment 生命周期一致,支持 trimMemory。圖片默認(rèn)使用默認(rèn) RGB_565 而不是 ARGB_888,雖然清晰度差些,但圖片更小,也可配置到 ARGB_888。
6.Glide 可以通過(guò) signature 或不使用本地緩存支持 url 過(guò)期
posted on 2016-11-26 18:54 安卓筆記俠 閱讀(993) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)