【问题标题】:OOM error causes by lots of small images (not being scaled), huge heap size大量小图像(未缩放)、巨大堆大小导致 OOM 错误
【发布时间】:2014-04-27 18:03:20
【问题描述】:

我知道有很多关于 OOM 问题的信息,但是在提出这个问题之前我已经阅读了很多资料,但在任何地方都找不到答案。

我正在使用

加载很多小图像
image = BitmapFactory.decodeResource(getResources(), R.drawable.image);

这些图像没有按比例缩小,因此 insamplesize 无济于事。这些图像中最大的只有大约 400kb。我的三星 Galaxy s4 越来越多,我不知道为什么。

04-27 13:38:40.023: I/dalvikvm-heap(16915): 将堆(碎片案例)增长到 97.450MB 分配 8294416 字节

xhdpi 图像总大小为 5.1 mb,那么我的堆如何达到 97.45mb ???

一些“字节分配”是巨大的。 2000 万+ 这对我来说没有意义,因为 400kb 只有 ~410,000 字节,那么为什么要分配 2000 万字节呢?

我暂时忽略了这个问题,因为它在我测试过的所有设备上都能正常工作。但现在我正在尝试使用分辨率稍高的图像(总共 5.9mb)并且应用程序得到了 OOM

04-27 13:52:28.890: E/dalvikvm-heap(22852): 内存不足 33177616字节分配。

它指向

04-27 13:52:28.900: E/AndroidRuntime(22852): 在 com.example.packagename.Game.run(Game.java:534)

这是

image = BitmapFactory.decodeResource(getResources(), R.drawable.image);

这张图片只有42kb!为什么需要分配 3300 万字节!?

还有我可以在应用加载时预加载这些图像吗?我想这样做以加快视图之间的转换,并且这些图像是否可以以需要更少内存的方式存储? (它们存储在 /res 中)

【问题讨论】:

  • 您的“400kb”是指磁盘上的大小吗?
  • 是吗?在我的电脑上是 420kb...

标签: android memory bitmap out-of-memory


【解决方案1】:

xhdpi 图像总大小为 5.1 mb,那么我的堆如何达到 97.45mb ???

PNG 和 JPEG 图像文件从其内存大小压缩 90-95%。所以,你所看到的听起来是对的。

在您详细了解了PNGJPEG 文件的工作原理之后,您应该考虑阅读大量documentation on bitmap management

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2016-11-08
    • 2021-10-13
    • 1970-01-01
    • 2023-01-26
    相关资源
    最近更新 更多