我们使用此处文档中提到的步骤设置了 Fresco - http://frescolib.org/docs/configure-image-pipeline.html。
ImagePipelineConfig config = ImagePipelineConfig
.newBuilder(this)
.setBitmapsConfig(Bitmap.Config.RGB_565)
.setRequestListeners(requestListeners)
.setDownsampleEnabled(true)
.build();
Fresco.initialize(this, config);
根据需要在应用程序 onCreate 中设置一次。来自网络的图像很少,无法匹配大小,因此我们必须使用 setDownsampleEnabled 和 resize 选项。
以下是用于加载图像的代码 -
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(asseturl))
.setProgressiveRenderingEnabled(true)
.setResizeOptions( new ResizeOptions(width,height))
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(sdv.getController())
.setTapToRetryEnabled(true)
.build();
sdv.setController(controller);
控制器在 Recyclerview 的 onViewDetachedFromWindow 和 onViewRecycled 方法中设置为 null。
在运行应用程序的几分钟内,使用的内存非常高。
Profiler 内存图看起来并不漂亮。
附上堆转储以供参考。
还检查了 Fresco 的日志。该日志提到多次对同一图像进行下采样。我已经验证了对图像的请求只进行了一次。
附上 Logcat 快照