<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              5.0以下的主流圖片加載框架有哪些?安卓加載圖片四大框架

              來源:CSDN 時間:2023-04-06 10:06:25

              主流圖片加載框架?


              (資料圖片)

              1> Picasso

              2> Glide

              3> Fresco

              4> ImageLoader

              介紹:

              Picasso:和Square的網絡庫一起能發揮最大作用,因為Picasso可以選擇將網絡請求的緩存部分交給了okhttp實現

              Glide:模仿了Picasso的API,而且在他的基礎上加了很多的擴展(比如gif等支持),Glide默認的Bitmap格式是RGB_565,比 Picasso默認的ARGB_8888格式的內存開銷要小一半;Picasso緩存的是全尺寸的(只緩存一中),而Glide緩存的是跟ImageView尺寸相同的(即56*56和128*128是兩個緩存)。

              Fresco:最大的又是在于5.0以下(最低2.3)的Bitmap加載。在5.0以下系統,Fresco將圖片放到一個特別的內存區域(Ashmem區)。當然,在圖片不顯示的時候,占用的內存會自動被釋放。這會使得APP更加流暢,減少因圖片內存占用而引發的OOM。為什么說5.0以下呢?因為在5.0系統以后系統默認就是存儲在Ashmem區了。

              ImageLoader:旨在為圖像加載,緩存和顯示提供強大,靈活可定制的工具。他提供了大量的配置選項和良好的控制圖像加載和緩存過程。

              下面簡單說一說這些框架的使用:

              Picasso的基本使用:

              將Picasso添加進項目后,只需一行就搞定:

              Picasso.with(context).load(imageUrl).into(imageView);

              1.自動將圖像緩存在本地;

              2.通過圖片壓縮轉換以減少內存消耗

              3.自動處理了ImageView的回收,即自動取消不在事業范圍內的ImageView視圖資源的加載;

              Picasso裁剪:

              Picasso.with(context).load(imageUrl).resize(50,50).centerCrop.info(imageView);

              自定義格式轉換:

              為了實現更多想要轉換的效果,可以自己實現一個Transformation接口的類,然后將其對象傳遞給transform()方法:

              public class myTransformation implements Transformation{

              @Override

              public Bitmap transform(Bitmap source){

              //對source實現自定義裁剪

              }

              @Override     

              public String key(){

              return "square()"

              }

              }

              占位符圖片:

              所謂的占位符圖像即當圖片為正常顯示時默認的圖片,通過placeholder()設置,Picasso也支持設置圖片顯示錯誤是顯示的默認圖片,通過error()設置

              Picasso.with(context).load(imageUrl).placeholder(R.drawable.image_placeholder).error(R.drawable.image).into(imageView);

              載入本地資源:

              除了通過網絡下載圖片,Picasso也可以載入本地圖片資源:

              Picasso.with(context).load(R.deawable.icon).into(imageView);

              Picasso.with(context).load("file://android_asset/Android.png").into(imageView);

              Picasso.with(context).load(new File(...)).into(imageView);

              調試:為了方便調試,你可以通過測試Picasso的setIndicatiorEnabled(true);可以讓不同來源的圖片顯示一個不同的色彩標記

              2.Glide最火圖片加載開源框架加載Gif資源到ImageView中

              通常ImageView不能加載Gif圖片,如果不做任何處理的話,加載到ImageView中的Gif只顯示第一幀。網上大多方案都是借助Android的Movie,把gif圖片作為流,解析成Android Movie顯示,這些定制的基本思想就是線檢測圖片資源是否為Gif圖片,若是,則按照Android Movie解析之。

              Glide,本身在圖片加載和緩存方面做得比較優秀,同時架子啊Gif圖也很方便,把需要加載的Gif圖片放到drawable目錄下,然后就和普通的ImageView設置一個圖片資源R.drawable.xx 一樣,很簡單?;蛘邚木W絡URL加載一個圖片,開發者不用關心這個圖片資源是否是gif還是其他jpg還是png等等格式,直接將其當做一個普通的圖片加載即可,

              使用:

              Glide.with(this).load(R.drawable.loading).into(imageView);

              3.Fresco讓圖片的漸進式呈現的強大框架

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

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

              Fresco支持Android2.3及以上系統

              特性

              內存管理:

              解壓后的圖片,即Bitmap,占用大量的內存。大的內存占用勢必會引發更加頻繁的GC。在5.0以下,GC將會顯著的引發界面卡頓。在5.0以下系統,Fresco將圖片放到一個熱別的內存區域。當然,在圖片不顯示的時候,占用的內存會自動釋放。這會使得APP更加流暢,減少因為圖片內存占用而引發的OOM。

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

              圖片的漸進式呈現:

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

              Android本身的圖片庫不支持次格式,但是Fresco支持,使用是,和往常一樣僅僅需要提供一個圖片的URL即可.

              GIF圖和WebP格式:

              支持GIF,支持WebP格式

              圖像的呈現:

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

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

              元教徒,當然圓圈也行。

              下載失敗后,點擊重新下載

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

              指定用戶按壓式的overlay

              圖像的加載

              Fresco的 image pipeline 設計,允許用戶在多方面控制圖片的加載:為同一個圖片指定不同的遠程路徑,或者使用已經存在本地緩存中的圖片先顯示一個低解析度的圖片,等高清圖下載完之后在現實高清圖

              加載完成回調通知

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

              縮放或者旋轉圖片

              處理已下載的圖片

              WebP支持

              4.ImageLoader

              特性:

              多線程圖像加載(異步或者同步);

              ImageLoader配置的廣泛定制(線程池,下載器,解碼器,內存和磁盤緩存策略,顯示圖像選項等);

              每個顯示圖像調用的許多自定義選項(存根圖像,緩存開關,解碼選項,位圖處理和顯示等);

              內存和/或磁盤上的圖像緩存(設備的文件系統或SD卡);

              監聽加載過程(包括下載進度)

              根據控件的大小對Bitmap進行裁剪,減少Bitmap占用過多的內存

              較好的控制圖片的加載過程,例如暫停圖片加載,重新開始加載,一般使用在ListView,GridView中,滑動過程中暫停加載圖片,停止滑動的時候去加載圖片

              提供在較慢的網絡下對圖片進行加載

              5.Picasso,Fresco,Glide,ImageLoader優劣

              Fresco:

              優點:

              1.圖片存儲在安卓系統的匿名共享內存,而不是虛擬機的堆內存中,圖片的中間緩沖數據也存放在本地堆內存,所以,應用程序有更多的內存使用,不會因為圖片加載而導致oom,同時也減少垃圾回收器頻繁回收Bitmap導致的界面卡頓,性能更高。

              2.漸進式加載JPEG圖片,支持圖片從模糊到清晰加載

              3.圖片可以以任意的中心店顯示在ImageView,而不僅僅是圖片的中心

              4.JPEG圖片改變大小也是在native進行的,不是在虛擬機的堆內存,同樣減少OOM

              5.很少的支持GIF圖片的顯示

              缺點:

              框架較大,影響APK體積

              使用較繁瑣

              ImageLoader,Picasso,Glide:這三者實現機制都差不多

              ImageLoader:

              比較老的框架,穩定,加載速度適中,缺點在于不支持GIF圖片加載,使用稍微繁瑣,并且緩存機制沒有和http的緩存很好的結合,完全是自己的一套緩存機制

              Picasso:

              使用方便,一行代碼完成加載圖片顯示,框架體積小

              缺點在于不支持GIF,并且他可能是想讓服務器去處理圖片的縮放,他緩存的圖片是未縮放的,并且默認使用ARGB_8888格式緩存圖片,緩存體積大

              Glide:

              可以說是Picasso的升級版,有Picasso的優點,并且支持GIF圖片的加載,圖片緩存也會自動縮放,默認使用RGB_565格式緩存圖片,是Picasso緩存體積的一半

              總結:

              Picasso所能實現的功能,Glide都能做,無非是所需的設置不同。但是Picasso體積比起Glide小太多,如果項目中網絡請求本身用的就是okhttp或者retrofit(本質還是okhttp),那么建議用Picasso,體積會小很多。Glide的好處就是處理大型的圖片流,比如gif、Video,如果你們是做美拍、愛拍這種視頻類應用的話,建議使用Glide。

              Freaso在5.0以下的內存優化非常好,代價就是體積也非常大,按體積算Fresco > Glide > Picasso

              不過在使用起來也有些不便(建議:他只能用內置的一個ImageView來實現這些功能,用起來比較麻煩,我們通常是根據Fresco自己改改,直接使用它的Bitmap層)  

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩