在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 直接使用Image Pipeline
進(jìn)度條
在JAVA代碼中使用Drawees
Drawee的各種效果配置
緩存
一些陷阱
關(guān)于在Android Studio中編譯
多圖請(qǐng)求及圖片復(fù)用
自定義網(wǎng)絡(luò)加載
支持的URIs
可關(guān)閉的引用
監(jiān)聽(tīng)下載事件
修改圖片
引入Fresco
縮放
圓角和圓圈
配置Image Pipeline
縮放和旋轉(zhuǎn)圖片
(圖片請(qǐng)求)Image Requests
自定義View
使用ControllerBuilder
在XML中使用Drawees
開(kāi)始使用 Fresco
關(guān)鍵概念
Image Pipeline介紹
漸進(jìn)式JPEG圖
數(shù)據(jù)源和數(shù)據(jù)訂閱者
直接使用Image Pipeline
動(dòng)畫(huà)圖(gif)
使用其他的Image Loader

直接使用Image Pipeline

本教程內(nèi)容來(lái)源于:http://fresco-cn.org
采用 知識(shí)共享 署名 4.0 國(guó)際 許可協(xié)議 進(jìn)行許可

本頁(yè)介紹Image pipeline的高級(jí)用法,大部分的應(yīng)用使用Drawees 和image pipeline打交道就好了。

直接使用Image pipeline是較為有挑戰(zhàn)的事情,這意味著要維護(hù)圖片的內(nèi)存使用。Drawees 會(huì)根據(jù)各種情況確定圖片是否需要在內(nèi)存緩存中,在需要時(shí)加載,在不需要時(shí)移除。直接使用的話,你需要自己完成這些邏輯。

Image pipeline返回的是一個(gè)CloseableReference對(duì)象。在這些對(duì)象不需要時(shí),Drawees會(huì)調(diào)用.close()方法。如果你的應(yīng)用不使用Drawees,那你需要自己完成這個(gè)事情。

Java的GC機(jī)制會(huì)在Bitmap不使用時(shí),清理掉Bitmap。但要GC時(shí)總是太遲了,另外GC是很昂貴的開(kāi)銷(xiāo)。GC大對(duì)象也會(huì)帶來(lái)性能問(wèn)題,尤其是在5.0以下系統(tǒng)。

調(diào)用 pipeline

首先創(chuàng)建一個(gè)image request. 然后傳遞給 ImagePipeline:

ImagePipeline imagePipeline = Fresco.getImagePipeline();
DataSource<CloseableReference<CloseableImage>> 
    dataSource = imagePipeline.fetchDecodedImage(imageRequest);

關(guān)于如果接收數(shù)據(jù),請(qǐng)參考數(shù)據(jù)源 章節(jié)。

忽略解碼

如果你不保持圖片原始格式,不執(zhí)行解碼,使用fetchEncodedImage即可:

DataSource<CloseableReference<PooledByteBuffer>> 
    dataSource = imagePipeline.fetchEncodedImage(imageRequest);

從Bitmap緩存中立刻取到結(jié)果

不像其他緩存,如果圖片在內(nèi)存緩存中有的話,可以在UI線程立刻拿到結(jié)果。

DataSource<CloseableReference<CloseableImage>> dataSource =
    mImagePipeline.fetchImageFromBitmapCache(imageRequest);
CloseableReference<CloseableImage> imageReference;
try {
  imageReference = dataSource.getResult();
  if (imageReference != null) {
    CloseableImage image = imageReference.get();
    // do something with the image
  }
} finally {
  dataSource.close();
  CloseableReference.closeSafely(imageReference);
}

千萬(wàn) 不要 省略掉 finally 中的代碼!

預(yù)加載圖片

預(yù)加載圖片可減少用戶等待的時(shí)間,如果預(yù)加載的圖片用戶沒(méi)有真正呈現(xiàn)給用戶,那么就浪費(fèi)了用戶的流量,電量,內(nèi)存等資源了。大多數(shù)應(yīng)用,并不需要預(yù)加載。

Image pipeline 提供兩種預(yù)加載方式。

預(yù)加載到文件緩存:

imagePipeline.prefetchToDiskCache(imageRequest);

預(yù)加載到內(nèi)存緩存:

imagePipeline.prefetchToBitmapCache(imageRequest);