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

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

直接使用Image Pipeline

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

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

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

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

Java的GC機(jī)制會在Bitmap不使用時,清理掉Bitmap。但要GC時總是太遲了,另外GC是很昂貴的開銷。GC大對象也會帶來性能問題,尤其是在5.0以下系統(tǒng)。

調(diào)用 pipeline

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

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

關(guān)于如果接收數(shù)據(jù),請參考數(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);
}

千萬 不要 省略掉 finally 中的代碼!

預(yù)加載圖片

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

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

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

imagePipeline.prefetchToDiskCache(imageRequest);

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

imagePipeline.prefetchToBitmapCache(imageRequest);