Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...
在android中的加載網絡圖片是一件十分令人頭疼的事情,在網上有著許多關于加載網絡圖片的開源庫,可以讓我們十分方便的加載網絡圖片。在這里我主要介紹一下我自己在使用Volley, Picasso, Universal-Imageloader的一些使用的感悟。以及最基本的用法介紹。
1.android-Volley
給ImageView設置圖片源
// p_w_picpathView是一個ImageView實例??
// ImageLoader.getImageListener的第二個參數(shù)是默認的圖片resource id??
// 第三個參數(shù)是請求失敗時候的資源id,可以指定為0??
ImageListener listener = ImageLoader.getImageListener(p_w_picpathView, android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete);??
mImageLoader.get(url, listener);??
復制代碼
使用NetworkImageView
mImageView.setImageUrl(url, p_w_picpathLoader)
復制代碼
來設定。而且,這個控件在被從父控件detach的時候,會自動取消網絡請求的,即完全不用我們擔心相關網絡請求的生命周期問題。mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache());??
.... ...??
if(holder.p_w_picpathRequest != null) {??
? ?holder.p_w_picpathRequest.cancel();??
}??
holder.p_w_picpathRequest = mImageLoader.get(BASE_UR + item.p_w_picpath_url, holder.p_w_picpathView, R.drawable.loading, R.drawable.error);??
復制代碼
總結:如果你的工程項目,是一個比較小的項目,或者要求不是很高的項目,處理比較簡單的可以使用這個庫,這個庫是Google 2013 I/O 發(fā)布的一個開源庫。使用這個庫在圖片的處理上,沒有提供任何的圖片處理的操作,個人感覺這個庫主要在網絡數(shù)據(jù)連接上比較好,在圖片處理上還是不夠完善,強大。
2.Picasso
Picasso加載網絡圖片的使用很簡單,只需要一行代碼就可以搞定。
Picasso.with(context) .load(url).resize(50, 50).centerCrop().into(p_w_picpathView)
復制代碼
Picasso有如下特性:
處理Adapter中的 ImageView 回收和取消已經回收ImageView的下載進程
使用最少的內存完成復雜的圖片轉換,比如把下載的圖片轉換為圓角等
自動添加磁盤和內存緩存
總結:如果你的項目里面,對于圖片有一些具體的要求的話,建議使用這個庫,但是這個庫當你需要對圖片作一些具體的操作比如加載圓角矩形圖片、裁剪圖片為圓形時,需要你自己寫一些操作,如果基礎不夠好的會感覺很困難。還有就是這個庫我們只能看到結果,無法關心圖片的下載過程。
3.Universal-ImageLoader
先要配置ImageLoaderConfiguration這個類實現(xiàn)全局ImageLoader的實現(xiàn)情況。可以選擇在Application中初始化設置該類。
使用ImageLoader進行圖片加載的時候,先要實例化ImageLoader
總結:這個庫有著對加載網絡圖片的吵詳細配置。可以根據(jù)個人的喜歡,進行一些配置等等。并且可以實現(xiàn)圖片下載過程的監(jiān)聽。且可以支持圖片下載完成后,顯示圓形或者圓角矩形的圖片。
4.Fresco
關于 Fresco
Facebook最近推出了一款用于Android應用中展示圖片的強大圖片庫Fresco,它能夠從網絡、本地存儲和本地資源中加載圖片。而且,為了節(jié)省數(shù)據(jù)和CPU,它擁有三級緩存。
Fresco 是一個強大的圖片加載組件。
Fresco 中設計有一個叫做?p_w_picpath pipeline?的模塊。它負責從網絡,從本地文件系統(tǒng),本地資源加載圖片。為了最大限度節(jié)省空間和CPU時間,它含有3級緩存設計(2級內存,1級文件)。
Fresco 中設計有一個叫做?Drawees?模塊,方便地顯示loading圖,當圖片不再顯示在屏幕上時,及時地釋放內存和空間占用。
Fresco 支持 Android2.3(API level 9) 及其以上系統(tǒng)。
特性
內存管理
解壓后的圖片,即Android中的Bitmap,占用大量的內存。大的內存占用勢必引發(fā)更加頻繁的GC。在5.0以下,GC將會顯著地引發(fā)界面卡頓。
在5.0以下系統(tǒng),Fresco將圖片放到一個特別的內存區(qū)域。當然,在圖片不顯示的時候,占用的內存會自動被釋放。這會使得APP更加流暢,減少因圖片內存占用而引發(fā)的OOM。
Fresco 在低端機器上表現(xiàn)一樣出色,你再也不用因圖片內存占用而思前想后。
圖片的漸進式呈現(xiàn)
漸進式的JPEG圖片格式已經流行數(shù)年了,漸進式圖片格式先呈現(xiàn)大致的圖片輪廓,然后隨著圖片下載的繼續(xù),呈現(xiàn)逐漸清晰的圖片,這對于移動設備,尤其是慢網絡有極大的利好,可帶來更好的用戶體驗。
Android 本身的圖片庫不支持此格式,但是Fresco支持。使用時,和往常一樣,僅僅需要提供一個圖片的URI即可,剩下的事情,Fresco會處理。
Gif圖和WebP格式
是的,支持加載Gif圖,支持WebP格式。
圖像的呈現(xiàn)
Fresco 的 Drawees 設計,帶來一些有用的特性:
自定義居中焦點(對人臉等圖片顯示非常有幫助)
圓角圖,當然圓圈也行。
下載失敗之后,點擊重現(xiàn)下載
自定義占位圖,自定義overlay, 或者進度條
指定用戶按壓時的overlay
圖像的加載
Fresco 的 p_w_picpath pipeline 設計,允許用戶在多方面控制圖片的加載:
為同一個圖片指定不同的遠程路徑,或者使用已經存在本地緩存中的圖片
先顯示一個低解析度的圖片,等高清圖下載完之后再顯示高清圖
加載完成回調通知
對于本地圖,如有EXIF縮略圖,在大圖加載完成之前,可先顯示縮略圖
縮放或者旋轉圖片
處理已下載的圖片
WebP 支持
PS:還有一個glide的框架
Glide?是一個高效、開源、 Android設備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協(xié)議發(fā)布。Glide具有獲取、解碼和展示視頻劇照、圖片、動畫等功能,它還有靈活的API,這些API使開發(fā)者能夠將Glide應用在幾乎任何網絡協(xié)議棧里。創(chuàng)建Glide的主要目的有兩個,一個是實現(xiàn)平滑的圖片列表滾動效果,另一個是支持遠程圖片的獲取、大小調整和展示。近日,Glide 3.0發(fā)布,現(xiàn)已提供?jar包下載?,同時還支持使用Gradle以及Maven進行構建。該版本包括很多值得關注的新功能,如支持Gif 動畫和視頻劇照解碼、智能的暫停和重新開始請求、支持縮略圖等,具體新增功能如下如下:
GIF?動畫的解碼?:通過調用Glide.with(context).load(“圖片路徑“)方法,GIF動畫圖片可以自動顯示為動畫效果。如果想有更多的控制,還可以使用Glide.with(context).load(“圖片路徑“).asBitmap()方法加載靜態(tài)圖片,使用Glide.with(context).load(“圖片路徑“).asGif()方法加載動畫圖片
本地視頻劇照的解碼:?通過調用Glide.with(context).load(“圖片路徑“)方法,Glide能夠支持Android設備中的所有視頻劇照的加載和展示
縮略圖的支持:?為了減少在同一個view組件里同時加載多張圖片的時間,可以調用Glide.with(context).load(“圖片路徑“).thumbnail(“縮略比例“).into(“view組件“)方法加載一個縮略圖,還可以控制thumbnail()中的參數(shù)的大小,以控制顯示不同比例大小的縮略圖
Activity?生命周期的集成:?當Activity暫停和重啟時,Glide能夠做到智能的暫停和重新開始請求,并且當Android設備的連接狀態(tài)變化時,所有失敗的請求能夠自動重新請求
轉碼的支持:?Glide的toBytes() 和transcode() 兩個方法可以用來獲取、解碼和變換背景圖片,并且transcode() 方法還能夠改變圖片的樣式
動畫的支持:?新增支持圖片的淡入淡出動畫效果(調用crossFade()方法)和查看動畫的屬性的功能
OkHttp?和Volley?的支持:?默認選擇HttpUrlConnection作為網絡協(xié)議棧,還可以選擇OkHttp和Volley作為網絡協(xié)議棧
其他功能:?如在圖片加載過程中,使用Drawables對象作為占位符、圖片請求的優(yōu)化、圖片的寬度和高度可重新設定、縮略圖和原圖的緩存等功能
另外,請大家注意,除了以上新引入的功能外,還具有Glide 2.x系列版本的所有功能,如背景圖片的加載、內存和磁盤間的高效緩存、使用位圖和資源池提高加載性能, 更多Glide3.0相關信息請登陸GitHub上的?Wiki頁面?查看。
2015年10月14日16:26:20
引用網友?傾城_之淚?的理解:
Universal Image Loader:一個強大的圖片加載庫,包含各種各樣的配置,最老牌,使用也最廣泛。
Picasso: Square出品,必屬精品。和OkHttp搭配起來更配呦!
Volley ImageLoader:Google官方出品,可惜不能加載本地圖片~
Fresco:Facebook出的,天生驕傲!不是一般的強大。
Glide:Google推薦的圖片加載庫,專注于流暢的滾動。
還有就是轉載下泡在網上的日子文章總結:
總結
Glide和Picasso都是非常完美的庫。Glide加載圖像以及磁盤緩存的方式都要優(yōu)于Picasso,速度更快,并且Glide更有利于減少OutOfMemoryError的發(fā)生,GIF動畫是Glide的殺手锏。不過Picasso的圖片質量更高。你更喜歡哪個呢?
雖然我使用了很長時間的Picasso,但是我得承認現(xiàn)在我更喜歡Glide。我的建議是使用Glide,但是將Bitmap格式換成 ARGB_8888、讓Glide緩存同時緩存全尺寸和改變尺寸兩種。
轉載于:https://blog.51cto.com/wuvae/1763975
總結
以上是生活随笔為你收集整理的Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Data Cluster】真机环境下M
- 下一篇: json使用