android - 加载可绘制对象时 90MB 堆大小

标签 android image memory

我想显示来自用户设备的一些图像的预览。为此,我在外部存储中搜索图像文件,对于包含图像文件的每个文件夹,我在 ListView 中列出了文件夹的名称和来自该文件夹的图像。 在我的 Nexus 上有 6 个包含图像的文件夹,所以我有 6 个 ListView 项目。 我使用以下方式加载所有图像:

Drawable.createFromPath(file.getAbsolutePath())

并将生成的可绘制对象缓存在 HashMap 中,以防止多次加载同一图像。

但是,堆从 20MB 增长到 >90MB。加载图像时,应用程序响应会延迟 2 秒。很糟糕。

我不知道堆如何从 6 个大约 50KB 的图像增长到 90MB,但无论如何。为了解决这个问题,我尝试从图像中加载子采样位图 - 但是每当我加载它们时,我都会遇到内存不足的异常。

我已经多次验证加载的图片不超过这 6 张。 我能做什么?

最佳答案

您应该做的是使用 MAT 工具分析应用程序的内存使用情况,如 this 中所述。惊人的文章。此工具将帮助您识别潜在的内存泄漏并查看究竟是什么触发了堆增长。

关于android - 加载可绘制对象时 90MB 堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582427/

相关文章:

c++ - 远离 Windows\C++ 中的虚拟内存

java - 基本蓝牙应用程序无法运行

java - 删除房间内数据库

c++ - YCbCr 直接从 jpeg 加载器输入

C# 内存配置文件

c++ - 使用 QMessageBox 为 QPushButtons 释放内存

android - Cordova Android 7 调用未知插件

java - 将 List 发送到 KvmSerialized 类中

image - 将多个图像打包成 GOLANG 二进制文件

.net - libjpeg 和 .Net jpeg 编解码器在单色数据上真的有很大不同吗?