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

直接使用Image Pipeline

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

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

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

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

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

調用 pipeline

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

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

關于如果接收數(shù)據(jù),請參考數(shù)據(jù)源 章節(jié)。

忽略解碼

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

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

從Bitmap緩存中立刻取到結果

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

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 中的代碼!

預加載圖片

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

Image pipeline 提供兩種預加載方式。

預加載到文件緩存:

imagePipeline.prefetchToDiskCache(imageRequest);

預加載到內存緩存:

imagePipeline.prefetchToBitmapCache(imageRequest);