日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...

發布時間:2023/11/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在android中的加載網絡圖片是一件十分令人頭疼的事情,在網上有著許多關于加載網絡圖片的開源庫,可以讓我們十分方便的加載網絡圖片。在這里我主要介紹一下我自己在使用Volley, Picasso, Universal-Imageloader的一些使用的感悟。以及最基本的用法介紹。
1.android-Volley

  • 給ImageView設置圖片源


  • // p_w_picpathView是一個ImageView實例??

  • // ImageLoader.getImageListener的第二個參數是默認的圖片resource id??

  • // 第三個參數是請求失敗時候的資源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

    ? ? Volley提供了一個新的控件NetworkImageView來代替傳統的ImageView,這個控件的圖片屬性可以通過
  • 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 發布的一個開源庫。使用這個庫在圖片的處理上,沒有提供任何的圖片處理的操作,個人感覺這個庫主要在網絡數據連接上比較好,在圖片處理上還是不夠完善,強大。


    2.Picasso
    Picasso加載網絡圖片的使用很簡單,只需要一行代碼就可以搞定。
  • Picasso.with(context) .load(url).resize(50, 50).centerCrop().into(p_w_picpathView)


  • 復制代碼



    Picasso有如下特性:
    • 處理Adapter中的 ImageView 回收和取消已經回收ImageView的下載進程

    • 使用最少的內存完成復雜的圖片轉換,比如把下載的圖片轉換為圓角等

    • 自動添加磁盤和內存緩存


    總結:如果你的項目里面,對于圖片有一些具體的要求的話,建議使用這個庫,但是這個庫當你需要對圖片作一些具體的操作比如加載圓角矩形圖片、裁剪圖片為圓形時,需要你自己寫一些操作,如果基礎不夠好的會感覺很困難。還有就是這個庫我們只能看到結果,無法關心圖片的下載過程。

    3.Universal-ImageLoader

    • 先要配置ImageLoaderConfiguration這個類實現全局ImageLoader的實現情況。可以選擇在Application中初始化設置該類。

    • 使用ImageLoader進行圖片加載的時候,先要實例化ImageLoader



    總結:這個庫有著對加載網絡圖片的吵詳細配置。可以根據個人的喜歡,進行一些配置等等。并且可以實現圖片下載過程的監聽。且可以支持圖片下載完成后,顯示圓形或者圓角矩形的圖片。



    4.Fresco

    關于 Fresco

    Facebook最近推出了一款用于Android應用中展示圖片的強大圖片庫Fresco,它能夠從網絡、本地存儲和本地資源中加載圖片。而且,為了節省數據和CPU,它擁有三級緩存。


    Fresco 是一個強大的圖片加載組件。

    Fresco 中設計有一個叫做?p_w_picpath pipeline?的模塊。它負責從網絡,從本地文件系統,本地資源加載圖片。為了最大限度節省空間和CPU時間,它含有3級緩存設計(2級內存,1級文件)。

    Fresco 中設計有一個叫做?Drawees?模塊,方便地顯示loading圖,當圖片不再顯示在屏幕上時,及時地釋放內存和空間占用。

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

    特性

    內存管理

    解壓后的圖片,即Android中的Bitmap,占用大量的內存。大的內存占用勢必引發更加頻繁的GC。在5.0以下,GC將會顯著地引發界面卡頓。

    在5.0以下系統,Fresco將圖片放到一個特別的內存區域。當然,在圖片不顯示的時候,占用的內存會自動被釋放。這會使得APP更加流暢,減少因圖片內存占用而引發的OOM。

    Fresco 在低端機器上表現一樣出色,你再也不用因圖片內存占用而思前想后。

    圖片的漸進式呈現

    漸進式的JPEG圖片格式已經流行數年了,漸進式圖片格式先呈現大致的圖片輪廓,然后隨著圖片下載的繼續,呈現逐漸清晰的圖片,這對于移動設備,尤其是慢網絡有極大的利好,可帶來更好的用戶體驗。

    Android 本身的圖片庫不支持此格式,但是Fresco支持。使用時,和往常一樣,僅僅需要提供一個圖片的URI即可,剩下的事情,Fresco會處理。

    Gif圖和WebP格式

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

    圖像的呈現

    Fresco 的 Drawees 設計,帶來一些有用的特性:

    • 自定義居中焦點(對人臉等圖片顯示非常有幫助)

    • 圓角圖,當然圓圈也行。

    • 下載失敗之后,點擊重現下載

    • 自定義占位圖,自定義overlay, 或者進度條

    • 指定用戶按壓時的overlay

    圖像的加載

    Fresco 的 p_w_picpath pipeline 設計,允許用戶在多方面控制圖片的加載:

    • 為同一個圖片指定不同的遠程路徑,或者使用已經存在本地緩存中的圖片

    • 先顯示一個低解析度的圖片,等高清圖下載完之后再顯示高清圖

    • 加載完成回調通知

    • 對于本地圖,如有EXIF縮略圖,在大圖加載完成之前,可先顯示縮略圖

    • 縮放或者旋轉圖片

    • 處理已下載的圖片

    • WebP 支持

    PS:還有一個glide的框架

    Glide?是一個高效、開源、 Android設備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協議發布。Glide具有獲取、解碼和展示視頻劇照、圖片、動畫等功能,它還有靈活的API,這些API使開發者能夠將Glide應用在幾乎任何網絡協議棧里。創建Glide的主要目的有兩個,一個是實現平滑的圖片列表滾動效果,另一個是支持遠程圖片的獲取、大小調整和展示。近日,Glide 3.0發布,現已提供?jar包下載?,同時還支持使用Gradle以及Maven進行構建。該版本包括很多值得關注的新功能,如支持Gif 動畫和視頻劇照解碼、智能的暫停和重新開始請求、支持縮略圖等,具體新增功能如下如下:

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

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

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

    • Activity?生命周期的集成:?當Activity暫停和重啟時,Glide能夠做到智能的暫停和重新開始請求,并且當Android設備的連接狀態變化時,所有失敗的請求能夠自動重新請求

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

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

    • OkHttp?和Volley?的支持:?默認選擇HttpUrlConnection作為網絡協議棧,還可以選擇OkHttp和Volley作為網絡協議棧

    • 其他功能:?如在圖片加載過程中,使用Drawables對象作為占位符、圖片請求的優化、圖片的寬度和高度可重新設定、縮略圖和原圖的緩存等功能

    另外,請大家注意,除了以上新引入的功能外,還具有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加載圖像以及磁盤緩存的方式都要優于Picasso,速度更快,并且Glide更有利于減少OutOfMemoryError的發生,GIF動畫是Glide的殺手锏。不過Picasso的圖片質量更高。你更喜歡哪個呢?

    雖然我使用了很長時間的Picasso,但是我得承認現在我更喜歡Glide。我的建議是使用Glide,但是將Bitmap格式換成 ARGB_8888、讓Glide緩存同時緩存全尺寸和改變尺寸兩種。


    轉載于:https://blog.51cto.com/wuvae/1763975

    總結

    以上是生活随笔為你收集整理的Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。