【发布时间】:2012-03-26 10:39:45
【问题描述】:
我的应用程序 [1] 存在严重的内存问题。为了对此进行调查,我在不同的州对我的应用进行了堆转储。我看到一些位图占用了大量内存。我编写了一个小工具 [2],将字节数组解码为 Windows 位图文件 (.bmp),以便我可以查看位图并将它们与我在 res/drawable 文件夹中的文件进行比较.
我发现我的所有文件都被上采样了两次。
我首先检查了最大的一个:堆中超过 9MB 的字节数组缓冲区,它被解码为漂亮的 1920x1280 图片,而原始图片是 960x640 png 文件。
我尝试了第二大,超过 3MB,解码后显示了一张漂亮的 754x1200 图片,原始大小是......你猜怎么着?一个不错的 377x600 jpg 文件。
什么给了?
我在我的 Android Manifest 文件中启用了硬件加速(虽然我不确定我是否真的需要它,我只是在使用一些基本的视图和活动)。
我在 GSM Galaxy Nexus (yakju) 上运行 Android 4.0.2。我收到测试人员的反馈,他们的 4.0.3 Nexus S 存在问题,但我还无法检查他们的堆转储。
我在这里尝试节省内存,如果 Android 将所有内容翻倍,难怪应用程序会因为堆使用率过高(在我的情况下约为 64MB)而迅速崩溃。我希望有一个原因和解决方法。
参考资料:
【问题讨论】:
-
您应该在设置样本大小和解码图像时发布您的代码。这应该提供有关此行为的更多信息。这可能是 ICS 问题。
-
我只是在膨胀几个 ImageView。如果您需要查看一些代码,请检查链接 [1],一切都在那里。
标签: android memory-management bitmap out-of-memory heap-memory