多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > android圖片加載庫Glide

android圖片加載庫Glide

來源:程序員人生   發(fā)布時(shí)間:2016-07-27 08:50:57 閱讀次數(shù):2886次

甚么是Glide?

Glide是1個(gè)加載圖片的庫,作者是bumptech,它是在泰國舉行的google 開發(fā)者論壇上google為我們介紹的,這個(gè)庫被廣泛的應(yīng)用在google的開源項(xiàng)目中。

Glide解決甚么問題?

Glide是1個(gè)非常成熟的圖片加載庫,他可以從多個(gè)源加載圖片,如:網(wǎng)路,本地,Uri等,更重要的是他內(nèi)部封裝了非常好的緩存機(jī)制并且在處理圖片的時(shí)候能保持1個(gè)低的內(nèi)存消耗。

Glide怎樣使用?

在Glide的使用方面,它和Picasso的使用方法是比較相似的,并且他們的運(yùn)行機(jī)制也有很多相似的地方,很多博文會(huì)把二者進(jìn)行比較,此文也采取一樣的方式,通過比較二者來學(xué)習(xí)他們之間的優(yōu)點(diǎn)和不足。

首先,當(dāng)我們使用這兩個(gè)庫的時(shí)候第1步要做的就是導(dǎo)入庫,Picasso好說,直接依賴就行,但是Glide要注意,這個(gè)庫是要依賴于support liberary v4的,所以用這個(gè)庫的時(shí)候,不要忘了依賴v4包。

基本使用

在基本使用方面這兩個(gè)庫非常的相似,以下代碼所示: 
Picasso:

Picasso.with(context) .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg") .into(ivImg);
Glide:

Glide.with(context) .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg") .into(ivImg);
看到?jīng)]有,表面上看是否是非常相似,其實(shí)他們有1個(gè)不1樣的地方,就是Picasso的with只能傳入context,而Glide的with可以傳入context,還可以是Activity或是Fragment,你可能會(huì)問,這有甚么用呢?用途就是圖片的加載可以和Activity或Fragment保持1致,不至于出現(xiàn),Activity已暫停了,但是圖片卻還在加載的情況。

默許的Bitmap格式是RGB_565

1下是Picasso和Glide加載后的結(jié)果(1920x1080 像素的圖片被加載到768x432像素的imageview中):

你可以看到,被Glide加載的圖片在質(zhì)量上不如Picasso加載的圖片,這是為何?實(shí)際上是由于Glide的Bitmap默許的格式是RGB_565,而Picasso用的是ARGB_8888,所以雖然質(zhì)量上不如Picasso(其實(shí)在手機(jī)上也不明顯),但是RGB_565格式的圖片僅僅消耗ARGB_8888格式圖片1半的內(nèi)存。

Here is the memory consumption graphs between Picasso at ARGB8888 and Glide at RGB565. (Base application consumes around 8MB) 
下圖是Picass的ARGB8888格式圖片和Glide的RGB565格式圖片的內(nèi)存消耗比較(利用本身大約占8M):

如果你對(duì)圖片沒有太高的要求,那末用默許的格式就能夠,但是如果你對(duì)圖片質(zhì)量要求較高,那末可以把圖片的格式轉(zhuǎn)換為ARGB8888,方法就是通過繼承GlideMoudle,以下所示:

public class GlideConfiguration implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { // Apply options to the builder here. builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888); } @Override public void registerComponents(Context context, Glide glide) { // register ModelLoaders here. } }
然后在mainfest.xml注冊(cè)下

<meta-data android:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration" android:value="GlideModule"/>

在次看下圖,是否是完全1樣了呢? 

那讓我們?cè)倏?看二者之間的內(nèi)存消耗: 

我們發(fā)現(xiàn),雖然用的圖片格式是1樣的,并且Glide加載的幾近是先前的兩倍內(nèi)存,但是Picasso消耗的內(nèi)存依然遠(yuǎn)大于Glide.

這是由于,Picasso加載了完全尺寸的圖片(1920x1080像素)進(jìn)入內(nèi)存,當(dāng)繪圖的時(shí)候,讓GPU即時(shí)的恢復(fù)到所需要的尺寸(768x432像素),但是Glide則加載精確的imageview尺寸進(jìn)入內(nèi)存,固然,我們可以手動(dòng)使Picasso也使用這類方式加載圖片(設(shè)置顯示的尺寸):

Picasso.with(this) .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg") .resize(768, 432) .into(ivImgPicasso);

面的方式有局限性,就是我們必須知道imageview的精確尺寸,而如果我們的imageview設(shè)置了wrap,我們就不能用上面的那種方式了,而需要改成下面的方式:

Picasso.with(this) .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg") .fit() .centerCrop() .into(ivImgPicasso);

現(xiàn)在,我們?cè)賮砜磧?nèi)存消耗圖: 

哈哈,二者的內(nèi)存消耗現(xiàn)在差不多1樣了,但是不能不說的是在這1點(diǎn)上Glide確切比Picasso做的要好,由于Glide可以在每種情況下自動(dòng)的計(jì)算Imageview的尺寸。

圖片的質(zhì)量細(xì)節(jié)

當(dāng)我把imageview的尺寸調(diào)劑到和圖片1樣大的時(shí)候(1920x1080像素),我們來視察1下下面的圖片: 

這次兩張圖片的對(duì)照就比較明顯了,Glide加載的圖片可以明顯的看到鋸齒像素點(diǎn),但是當(dāng)用戶使用利用的時(shí)候,這其實(shí)不是那末容易發(fā)覺,并且,如果真的忍耐不了這類小瑕疵,可以把圖片格式調(diào)劑到ARGB_8888。

外部緩存

在默許情況下Picasso和Glide的外部緩存機(jī)制是非常不1樣的,通過實(shí)驗(yàn)可以發(fā)現(xiàn)(1920x1080 像素的圖片被加載到768x432像素的imageview中),Glide緩存的是768x432像素的圖片,而Picasso緩存的是整張圖片(1920x1080像素)。

如果加載的圖片是RGB565模式,緩存圖片也是RGB565模式。

當(dāng)我們調(diào)劑imageview的大小時(shí),Picasso會(huì)不管imageview大小是甚么,總是直接緩存整張圖片,而Glide就不1樣了,它會(huì)為每一個(gè)不同尺寸的Imageview緩存1張圖片,也就是說不管你的這張圖片有無加載過,只要imageview的尺寸不1樣,那末Glide就會(huì)重新加載1次,這時(shí)候候,它會(huì)在加載的imageview之前從網(wǎng)絡(luò)上重新下載,然后再緩存。

避免各位不明白,再來舉個(gè)例子,如果1個(gè)頁面的imageview是200*200像素,而另外一個(gè)頁面中的imageview是100*100像素,這時(shí)候候想要讓兩個(gè)imageview像是同1張圖片,那末Glide需要下載兩次圖片,并且緩存兩張圖片。

但是我們可以通過以下的方法來讓Glide即緩存全尺寸的圖片,有緩存不同尺寸的圖片:

Glide.with(this) .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg") .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide);

Glide的這類默許的緩存機(jī)制有1個(gè)優(yōu)點(diǎn),就是它可以加快圖片加載的速度(可以理解為以空間換時(shí)間),而Picasso會(huì)造成1定的延遲,由于它在加載到imageview的時(shí)候,總是需要調(diào)劑大小,確切Picasso有1個(gè)立即顯示圖片的方法(以下所示),但是這還是消除不了延時(shí)。

//Picasso .noFade();

在外部緩存方面Glide和Pcasso各有所長,你可以選擇適合自己的來用(也就是對(duì)你的app來講是控件重要還是時(shí)間重要)。

特性

你幾近可以用Glide來做Pcasso可以做的所有事情,并且他們的代碼風(fēng)格也非常類似:

調(diào)劑圖片尺寸:

// Picasso .resize(300, 200); // Glide .override(300, 200);

Center Cropping:

// Picasso .centerCrop(); // Glide .centerCrop();

圖形變換(Transforming):

// Picasso .transform(new CircleTransform()) // Glide .transform(new CircleTransform(context))

設(shè)置占位圖片和毛病圖片:

// Picasso .placeholder(R.drawable.placeholder) .error(R.drawable.imagenotfound) // Glide .placeholder(R.drawable.placeholder) .error(R.drawable.imagenotfound)

有甚么Glide可以做Pcasso卻做不了

Glide的1個(gè)明顯的優(yōu)點(diǎn)就是它可以加載gif圖片,你可能說我用Picasso加載也不報(bào)錯(cuò)啊?你要注意,用Picasso加載的gif圖片是不會(huì)動(dòng)的,以下所示:

由于Glide被設(shè)計(jì)成能和Activity/Fragment的生命周期完善的相結(jié)合,因此gif動(dòng)畫將隨著Activity/Fragment的生命周期自動(dòng)的開始和停止。

gif的緩存和1般的圖片也是1樣的,也是第1次加載的時(shí)候調(diào)劑大小,然后緩存。

但是,要注意的是,通過丈量,我們可以發(fā)現(xiàn)gif圖片將消耗非常多的內(nèi)存,因此使用它的時(shí)候要慎重。

除加載gif圖片外,Glide還可以解析任何的video文件成為1個(gè)靜態(tài)圖片。

另外一個(gè)比較有用的特性是,你可以配置顯示圖片的動(dòng)畫,而Picasso只支持1個(gè)淡入(fading in)動(dòng)畫效果。

你也能夠用thumbnail()來創(chuàng)造1個(gè)image的thumbnail(極小)的圖片。

還有很多的特性,但是1般都不太經(jīng)常使用,如,把1個(gè)圖片的編碼轉(zhuǎn)換為字節(jié)數(shù)組,等。

配置

我們可以對(duì)很多的配置做出調(diào)劑,如,外部緩存的大小和位置,內(nèi)部緩存的最大限制,Bitmap的格式等等,至于更多的配置,可以參考配置頁面。

庫的大小

Picasso的大小大約是118KB,而Glide大約有430KB。 

1個(gè)庫的大小有甚么意義嗎?確切,我也認(rèn)為意義不大!

我們?cè)賮砜?下二者之間的方法數(shù)量的比較: 

值得注意的是,在Android DEX file中的方法是有限制的,最大方法數(shù)為65535個(gè),從這1點(diǎn)來講,Glide的方法確切很多,并且,混淆器也建議對(duì)我們的項(xiàng)目進(jìn)行混淆。

總結(jié)

Glide和Picasso都不是完善的,從某些方面來講,Glide在圖片的緩存上來講是比較不錯(cuò)的,由于它的速度比較快,另外,它也能夠有效的避免OOM毛病,而加載gif圖片也是Glide的1大優(yōu)勢(shì),但是默許情況下picasso的圖片質(zhì)量是很高的。

另外的1點(diǎn)小建議是,使用Glide的時(shí)候把圖片的格式改成ARGB8888并且緩存全尺寸和其他尺寸的圖片,這樣使用可讓加載圖片更好。

資源

以下是1些關(guān)于Glide的資源:

  • Glide 3.0: a media management library for Android
  • Glide Wiki
  • Android Picasso vs Glide
  • Android: Image loading libraries Picasso vs Glide
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 一二三四免费手机在线观看视频 | 手机看片亚洲 | 成人娱乐网站 | 理论亚洲区美一区二区三区 | 欧美日韩在线播一区二区三区 | 欧美成人国产一区二区 | 暖暖在线精品日本中文 | 99热精品成人免费观看 | 日韩3区 | 在线观看欧洲成人免费视频 | 亚洲高清网站 | 国产亚洲精 | 尤物视频黄| 欧美一区二区三区播放 | 亚洲欧美一级夜夜爽w | 亚洲乱码在线观看 | 亚洲成人伊人网 | 欧美日韩亚洲一区二区三区 | 大学生一一级毛片在线播放 | 久久精品国产999久久久 | 性欧美精品videofree高清hd | 亚洲小视频在线观看 | 亚洲视频网站在线观看 | 69av免费观看| 日本一区二区三区在线网 | 欧美xxxxxxxxxx黑人 | 亚洲十八精品网站 | 欧美日韩性视频一区二区三区 | 成人午夜精品网站在线观看 | 亚洲精品久久久久久久久久ty | 男女视频在线观看免费 | 国产中文字幕在线播放 | 久久极品 | 国产精品系列在线一区 | 亚洲第一在线视频 | 69国产精品 | 国产永久免费爽视频在线 | 欧美精品一区二区三区免费观看 | 日韩黄色a级片 | 韩国午夜理伦三级2020豆豌 | 欧美成人性生活 |