【问题标题】:Android getting an OutOfMemoryError [duplicate]Android得到一个OutOfMemoryError [重复]
【发布时间】:2014-02-10 08:50:37
【问题描述】:

我经常使用函数setBackgroundResource(R.drawable.image)

我有 7 个按钮,想在一个焦点对准时更改背景。我猜使用选择器是行不通的,因为用户可以点击另一个视图,而我的按钮都不会成为焦点。

问题:我在这里遇到 OutOfMemoryError :

        but.setBackgroundResource(resIdNew);

        current_b_selection.setBackgroundResource(id_res_back);

我认为我的做法是错误的,但我真的不明白这里有什么好的做法。

【问题讨论】:

标签: android out-of-memory


【解决方案1】:

错误是不言自明的,您的图像或图像太大,请尝试最大 10kb 的内容。这将帮助您节省内存。如果您在模拟器上进行测试,则此错误很常见,如果是这样,请转到设备管理器上的特定模拟器设备并单击编辑,然后单击增加 RAM,必要时增加内存以及堆大小。对我而言,我会先在真实设备上进行测试,如果同样的问题仍然存在,那么我将不得不检查图像的大小。

【讨论】:

  • maximum of 10kb- 所以你的意思是大约 50 像素正方形的图像?文件大小与需要多少内存无关。
  • 我认为文件大小总是依赖于像素数。只需将像素降低到合理的水平。你的图片的像素大小是多少?
  • 小图搞定了!谢谢
  • @KevinKaburu 不。它依赖于压缩方案。创建一个 50x50 的单色图像,然后另存为 PNG、JPEG 和 BMP。现在比较文件大小。现在更改一个像素并再次保存。文件大小与像素有关,但不“依赖”它。使用ARGB888所需内存为widthxheightx4字节,除解压外,与文件大小无关。
  • @Simon 我不知道 :-/ 。很高兴你向我指出了这一点。虽然我希望该解决方案对您有用,如果确实如此,请投票给答案,以便它可以帮助更多的开发人员......
【解决方案2】:

试试这个:

在清单文件的应用程序标签中,添加一个属性:

android:largeHeap="true"。看看它是否删除了OutOfMemoryError...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 2011-10-22
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多