"com.facebook.imagepipeline.bitmaps.TooManyBitmapsException" Fresco使用過程中遇到的坑
阿新 • • 發佈:2018-11-14
使用Drawee來顯示圖片時,發現圖片顯示不出來,根據打的log發現 "com.facebook.imagepipeline.bitmaps.TooManyBitmapsException"的異常。
開始時根據異常的意思猜測可能開啟的圖片太多導致的,於是設定fresco的最大快取大小。
private static int MAX_MEM = 30* ByteConstants.MB; private ImagePipelineConfig getConfigureCaches(Context context) { final MemoryCacheParams bitmapCacheParams = newMemoryCacheParams( MAX_MEM,// 記憶體快取中總圖片的最大大小,以位元組為單位。 Integer.MAX_VALUE,// 記憶體快取中圖片的最大數量。 MAX_MEM,// 記憶體快取中準備清除但尚未被刪除的總圖片的最大大小,以位元組為單位。 Integer.MAX_VALUE,// 記憶體快取中準備清除的總圖片的最大數量。 Integer.MAX_VALUE);// 記憶體快取中單個圖片的最大大小。 Supplier<MemoryCacheParams> mSupplierMemoryCacheParams = newSupplier<MemoryCacheParams>() { @Override public MemoryCacheParams get() { return bitmapCacheParams; } }; ImagePipelineConfig.Builder builder = ImagePipelineConfig.newBuilder(context); builder.setBitmapMemoryCacheParamsSupplier(mSupplierMemoryCacheParams);return builder.build(); }
Fresco.initialize(this,getConfigureCaches(this));
然而,並沒有解決問題。看來這並不是由於快取了太多圖片引起的。百思不得其解之下google了下找的了一個方法,地址如下:
https://github.com/facebook/fresco/issues/213
其中說到了可能是fresco在載入圖片時重新定義了大小引起的。只要的當前類中初始化Fresco時新增下邊的程式碼即可。(注意是在當前activity中,不然在Application中可能不起作用)
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this) .setDownsampleEnabled(true) .build(); Fresco.initialize(this,config);
問題解決