Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android開源組件加載網(wǎng)絡(luò)圖片比較

Android-Volley

ImageView設(shè)置圖片源

 /**
 * imageView是一個(gè)ImageView實(shí)例
 * ImageLoader.getImageListener的第二個(gè)參數(shù)是默認(rèn)的圖片resource id
 * 第三個(gè)參數(shù)是請(qǐng)求失敗時(shí)候的資源id,可以指定為0
 */
ImageListener listener = ImageLoader.getImageListener(imageView,
android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete);

mImageLoader.get(url, listener);

NetworkImageView

Volley提供了一個(gè)新的控件NetworkImageView來代替?zhèn)鹘y(tǒng)的ImageView,這個(gè)控件的圖片屬性可以通過 來設(shè)定。
而且,這個(gè)控件在被從父控件detach的時(shí)候,會(huì)自動(dòng)取消網(wǎng)絡(luò)請(qǐng)求的,即完全不用我們擔(dān)心相關(guān)網(wǎng)絡(luò)請(qǐng)求的生命周期問題。

    mImageView.setImageUrl(url, imageLoader)
    mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache());
    if (holder.imageRequest != null) {
        holder.imageRequest.cancel();

    }
    holder.imageRequest = mImageLoader.get(BASE_UR + item.image_url, holder.imageView, R.drawable.loading, R.drawable.error);

總結(jié):如果你的工程項(xiàng)目,是一個(gè)比較小的項(xiàng)目,或者要求不是很高的項(xiàng)目,處理比較簡單的可以使用這個(gè)庫,這個(gè)庫是Google 2013 I/O 發(fā)布的一個(gè)開源庫。使用這個(gè)庫在圖片的處理上,沒有提供任何的圖片處理的操作,個(gè)人感覺這個(gè)庫主要在網(wǎng)絡(luò)數(shù)據(jù)連接上比較好,在圖片處理上還是不夠完善,強(qiáng)大。

Picasso
http://square.github.io/picasso/

Picasso加載網(wǎng)絡(luò)圖片的使用很簡單,只需要一行代碼就可以搞定。
1. Picasso.with(context) .load(url).resize(50, 50).centerCrop().into(imageView)
Picasso有如下特性:
- 處理Adapter中的 ImageView 回收和取消已經(jīng)回收ImageView的下載進(jìn)程
- 使用最少的內(nèi)存完成復(fù)雜的圖片轉(zhuǎn)換,比如把下載的圖片轉(zhuǎn)換為圓角等
- 自動(dòng)添加磁盤和內(nèi)存緩存
總結(jié):如果你的項(xiàng)目里面,對(duì)于圖片有一些具體的要求的話,建議使用這個(gè)庫,但是這個(gè)庫當(dāng)你需要對(duì)圖片作一些具體的操作比如加載圓角矩形圖片、裁剪圖片為圓形時(shí),需要你自己寫一些操作,如果基礎(chǔ)不夠好的會(huì)感覺很困難。還有就是這個(gè)庫我們只能看到結(jié)果,無法關(guān)心圖片的下載過程。

Universal-ImageLoader

  • 先要配置ImageLoaderConfiguration這個(gè)類實(shí)現(xiàn)全局ImageLoader的實(shí)現(xiàn)情況。可以選擇在Application中初始化設(shè)置該類。
  • 使用ImageLoader進(jìn)行圖片加載的時(shí)候,先要實(shí)例化ImageLoader

總結(jié):這個(gè)庫有著對(duì)加載網(wǎng)絡(luò)圖片的吵詳細(xì)配置。可以根據(jù)個(gè)人的喜歡,進(jìn)行一些配置等等。并且可以實(shí)現(xiàn)圖片下載過程的監(jiān)聽。且可以支持圖片下載完成后,顯示圓形或者圓角矩形的圖片。

Glide
https://muyangmin.github.io/glide-docs-cn/#glide-v4-android-english-tip

Glide 是一個(gè)高效、開源、 Android設(shè)備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協(xié)議發(fā)布。Glide具有獲取、解碼和展示視頻劇照、圖片、動(dòng)畫等功能,它還有靈活的API,這些API使開發(fā)者能夠?qū)lide應(yīng)用在幾乎任何網(wǎng)絡(luò)協(xié)議棧里。創(chuàng)建Glide的主要目的有兩個(gè),一個(gè)是實(shí)現(xiàn)平滑的圖片列表滾動(dòng)效果,另一個(gè)是支持遠(yuǎn)程圖片的獲取、大小調(diào)整和展示。近日,Glide 3.0發(fā)布,現(xiàn)已提供 jar包下載 ,同時(shí)還支持使用Gradle以及Maven進(jìn)行構(gòu)建。該版本包括很多值得關(guān)注的新功能,如支持Gif 動(dòng)畫和視頻劇照解碼、智能的暫停和重新開始請(qǐng)求、支持縮略圖等,具體新增功能如下

如下:

  • GIF 動(dòng)畫的解碼 :通過調(diào)用Glide.with(context).load(“圖片路徑“)方法,GIF動(dòng)畫圖片可以自動(dòng)顯示為動(dòng)畫效果。如果想有更多的控制,還可以使用Glide.with(context).load(“圖片路徑“).asBitmap()方法加載靜態(tài)圖片,使用Glide.with(context).load(“圖片路徑“).asGif()方法加載動(dòng)畫圖片

  • 本地視頻劇照的解碼: 通過調(diào)用Glide.with(context).load(“圖片路徑“)方法,Glide能夠支持Android設(shè)備中的所有視頻劇照的加載和展示

  • 縮略圖的支持: 為了減少在同一個(gè)view組件里同時(shí)加載多張圖片的時(shí)間,可以調(diào)用Glide.with(context).load(“圖片路徑“).thumbnail(“縮略比例“).into(“view組件“)方法加載一個(gè)縮略圖,還可以控制thumbnail()中的參數(shù)的大小,以控制顯示不同比例大小的縮略圖

  • Activity 生命周期的集成: 當(dāng)Activity暫停和重啟時(shí),Glide能夠做到智能的暫停和重新開始請(qǐng)求,并且當(dāng)Android設(shè)備的連接狀態(tài)變化時(shí),所有失敗的請(qǐng)求能夠自動(dòng)重新請(qǐng)求

  • 轉(zhuǎn)碼的支持: Glide的toBytes() 和transcode() 兩個(gè)方法可以用來獲取、解碼和變換背景圖片,并且transcode() 方法還能夠改變圖片的樣式

  • 動(dòng)畫的支持: 新增支持圖片的淡入淡出動(dòng)畫效果(調(diào)用crossFade()方法)和查看動(dòng)畫的屬性的功能

  • OkHttp 和Volley 的支持: 默認(rèn)選擇HttpUrlConnection作為網(wǎng)絡(luò)協(xié)議棧,還可以選擇OkHttp和Volley作為網(wǎng)絡(luò)協(xié)議棧

  • 其他功能: 如在圖片加載過程中,使用Drawables對(duì)象作為占位符、圖片請(qǐng)求的優(yōu)化、圖片的寬度和高度可重新設(shè)定、縮略圖和原圖的緩存等功能

另外,請(qǐng)大家注意,除了以上新引入的功能外,還具有Glide 2.x系列版本的所有功能,如背景圖片的加載、內(nèi)存和磁盤間的高效緩存、使用位圖和資源池提高加載性能, 更多Glide3.0相關(guān)信息請(qǐng)登陸GitHub上的 Wiki頁面 查看。

Fresco
https://www.fresco-cn.org/

Facebook最近推出了一款用于Android應(yīng)用中展示圖片的強(qiáng)大圖片庫Fresco,它能夠從網(wǎng)絡(luò)、本地存儲(chǔ)和本地資源中加載圖片。而且,為了節(jié)省數(shù)據(jù)和CPU,它擁有三級(jí)緩存。

Fresco 是一個(gè)強(qiáng)大的圖片加載組件。

Fresco 中設(shè)計(jì)有一個(gè)叫做 image pipeline 的模塊。它負(fù)責(zé)從網(wǎng)絡(luò),從本地文件系統(tǒng),本地資源加載圖片。為了最大限度節(jié)省空間和CPU時(shí)間,它含有3級(jí)緩存設(shè)計(jì)(2級(jí)內(nèi)存,1級(jí)文件)。

Fresco 中設(shè)計(jì)有一個(gè)叫做 Drawees 模塊,方便地顯示loading圖,當(dāng)圖片不再顯示在屏幕上時(shí),及時(shí)地釋放內(nèi)存和空間占用。

Fresco 支持 Android2.3(API level 9) 及其以上系統(tǒng)。

特性

內(nèi)存管理

解壓后的圖片,即Android中的Bitmap,占用大量的內(nèi)存。大的內(nèi)存占用勢必引發(fā)更加頻繁的GC。在5.0以下,GC將會(huì)顯著地引發(fā)界面卡頓。
在5.0以下系統(tǒng),F(xiàn)resco將圖片放到一個(gè)特別的內(nèi)存區(qū)域。當(dāng)然,在圖片不顯示的時(shí)候,占用的內(nèi)存會(huì)自動(dòng)被釋放。這會(huì)使得APP更加流暢,減少因圖片內(nèi)存占用而引發(fā)的OOM。

Fresco 在低端機(jī)器上表現(xiàn)一樣出色,你再也不用因圖片內(nèi)存占用而思前想后。

圖片的漸進(jìn)式呈現(xiàn)

漸進(jìn)式的JPEG圖片格式已經(jīng)流行數(shù)年了,漸進(jìn)式圖片格式先呈現(xiàn)大致的圖片輪廓,然后隨著圖片下載的繼續(xù),呈現(xiàn)逐漸清晰的圖片,這對(duì)于移動(dòng)設(shè)備,尤其是慢網(wǎng)絡(luò)有極大的利好,可帶來更好的用戶體驗(yàn)。

Android 本身的圖片庫不支持此格式,但是Fresco支持。使用時(shí),和往常一樣,僅僅需要提供一個(gè)圖片的URI即可,剩下的事情,F(xiàn)resco會(huì)處理。
Gif圖和WebP格式

是的,支持加載Gif圖,支持WebP格式。

圖像的呈現(xiàn)

Fresco 的 Drawees 設(shè)計(jì),帶來一些有用的特性:

  • 自定義居中焦點(diǎn)(對(duì)人臉等圖片顯示非常有幫助)
  • 圓角圖,當(dāng)然圓圈也行。
  • 下載失敗之后,點(diǎn)擊重現(xiàn)下載
  • 自定義占位圖,自定義overlay, 或者進(jìn)度條
  • 指定用戶按壓時(shí)的overlay

圖像的加載

Fresco 的 image pipeline 設(shè)計(jì),允許用戶在多方面控制圖片的加載:

  • 為同一個(gè)圖片指定不同的遠(yuǎn)程路徑,或者使用已經(jīng)存在本地緩存中的圖片
  • 先顯示一個(gè)低解析度的圖片,等高清圖下載完之后再顯示高清圖
  • 加載完成回調(diào)通知
  • 對(duì)于本地圖,如有EXIF縮略圖,在大圖加載完成之前,可先顯示縮略圖
  • 縮放或者旋轉(zhuǎn)圖片
  • 處理已下載的圖片
  • WebP 支持

總結(jié)

Universal Image Loader:一個(gè)強(qiáng)大的圖片加載庫,包含各種各樣的配置,最老牌,使用也最廣泛。

Picasso: Square出品,和OkHttp搭配起來更配呦!

Volley ImageLoader:Google官方出品,可惜不能加載本地圖片~

Fresco:Facebook出的,天生驕傲!不是一般的強(qiáng)大。

Glide:Google推薦的圖片加載庫,專注于流暢的滾動(dòng),更適合于列表大量圖片。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,841評(píng)論 25 708
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,834評(píng)論 2 59
  • 【Android 庫 Glide】 引用 Android圖片加載框架最全解析(一),Glide的基本用法Andro...
    Rtia閱讀 5,491評(píng)論 0 22
  • 前言 android中圖片加載框架有很多,所有框架最終達(dá)到的目都是在Android平臺(tái)上以極度簡單的方式加載和展示...
    luoqiang108閱讀 28,198評(píng)論 7 120
  • 尋找一件遺失或者被盜的價(jià)值連城的寶貝。這一寶貝也可能是無形的東西,比如一個(gè)失去的榮耀。一個(gè)人孤身出發(fā)到外地去尋找巨...
    四片竹閱讀 186評(píng)論 0 0