【问题标题】:android out of memory for including some image buttonsandroid内存不足,包括一些图像按钮
【发布时间】:2013-10-21 16:24:26
【问题描述】:

其实我很早就想知道如何以正确的方式呈现图形。

在一个活动中,我有以下内容:

  • 背景(png,全屏,768*1280,1.36MB)
  • 3个图标(每个图标已按下和未按下:2个状态,使用1个png 400 * 400,每个300KB),即3个图标* 2个图片* 300KB = 1.8MB
  • 更多文本视图

app启动后直接进入这个activity,一切正常,activity可以正常呈现。

然而不知何故,当应用程序已经运行了一些其他的活动,然后通过一个对话框进入这个活动,那么大部分时间都会发生错误,如下所示:

Out of memory on a 15728656-byte allocation.

问题:

我研究了一段时间,有人说bitmap.recycle(),但是如何实现?通过 onCreate?还是实际上 400*400 太大了?

如果我想根据用户的选择更改活动的背景,即当他按下按钮 A 时,背景更改为 bgdA,按下按钮 B 将背景更改为 bgdB...这样可以实现?

非常感谢!

【问题讨论】:

    标签: android image button out-of-memory


    【解决方案1】:

    取决于资产的存储位置,它可能需要的内存量,因为缩放因子是在密度差异之间计算的,这是一个灰色区域,因为我还没有找到任何支持此信息的官方 android 文档up,但是我已经多次看到该错误,这就是我处理它的方式。

    1.- 如果您没有正确的 drawable-(密度)中的资产,这将导致问题,因为根据您实际支持的设备,您应该将资产放入 drawable-xxhdpi 或 drawable-xhdpi ,你会注意到内存会大大减少

    2.- 如果你不想弄乱密度,因为它是一个没有太多细节的通用图像(比如简单的背景),然后将资源添加到 drawable-nodpi 文件夹中,它会阻止 android从尝试自行扩展资产..

    3.- 作为一种好的做法,尝试为适当的密度创建具有适当大小的资产,400 x 400 对于图标来说似乎太多了,这也会阻止您 OOM,不仅在此活动中,而且对于可能还需要加载大量资产的其他活动,为您的应用提供可扩展性..

    始终考虑将图像的“调整大小”留给操作系统可能会导致分配大量内存,因为操作系统会尝试根据公式宽度 * 高度 * 4 字节来调整它的大小,其中 4 个字节用于 ARGB每个像素,每种颜色或 alpha 1 个字节,因此,如果您的图像是例如 1090 * 1920,即使实际图像大小只有几个 KB,它也很容易在内部变成 8.3MB,如果它尝试缩放它,它它的大小也可能增加一倍。

    希望对你有帮助

    问候!

    【讨论】:

    • 感谢您最详细的回答!我真的不知道将图像放入那些不同的可绘制文件夹有什么不同。我随后将图像缩小到 100*100(真的可以看到它开始变得模糊),将图像放入 drawable-hdpi,并在开始活动之前释放媒体播放器,现在它的工作速度更快,所以far 不满足内存不足..谢谢!
    【解决方案2】:

    确保你的 res 中的每个 drawable 文件夹都有一个图像副本,例如,如果你在 S4 手机上运行你的应用程序并且你没有 drawable-xxhdpi 文件夹中的所有图像,你将用完即使是相当小的图像,内存也是如此。

    如果您需要在运行时更改背景,请使用 setBackgroundResource。

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      这是android中的常见问题,这里是正确的解决方案 http://developer.android.com/training/displaying-bitmaps/load-bitmap.html 简而言之,您必须根据您的要求缩小图像

      【讨论】:

      • 我想知道一个活动的背景如何?是否需要通过使用 BitmapFactory 将 Scaled Down 版本加载到内存中来执行?
      • 我没有明白你的意思,如果你想说你正在设置活动的背景,那么让我随时告诉你图像可能会因为少量而导致问题内存,所以它更好地缩放图像
      猜你喜欢
      • 2012-04-27
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 2013-05-08
      • 2013-08-25
      相关资源
      最近更新 更多