android - Fresco 高内存使用
问题描述
我们使用此处文档中提到的步骤设置了 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 快照
解决方案
推荐阅读
- python - Jupyter Notebook:'初始化期间遇到错误配置。没有这样的笔记本目录:D:/ABC'
- django - 如何将两个字段作为外键添加到表中?
- c# - 迁移到 Windows Server 2016 后的问题
- javascript - Heroku 不使用反应应用程序更新配置变量
- css - 如何在同一页面上有圆形和矩形图像
- haskell - 如何为具有两个参数的类型实例化 `Functor`?
- sql - 带有随机数的 SQL 选择语句
- sqlite - 在我的 Ubuntu(Ubuntu 18.04.3 LTS/bionic)上设置 Yocto,出现错误“ImportError: No module named '_sqlite3'”
- express - 如何在 Express 中保存持久数据?
- webpack - 将声明标记为无副作用的摇树