由按钮背景引起的OutOfMemory

时间:2013-06-18 09:43:05

标签: java android out-of-memory

我有一个列表,每行都有按钮。我的应用程序中的按钮使用自定义主题和自定义drawable(每个约0.5Kb png)。 用户抱怨OutOfMemory错误,每周出现几次。

第一个想法是按钮加载BitmapDrawables并且不回收它们。所以它导致超过本机内存。 为了测试它,我用大约300Kb(jpgs)的更大图像改变了我的drawables。 在不同设备上测试Android版本2.1-2.3.x

我看到的内容:

  1. 只有一个Bitmap实例加载并用于每个按钮。每个位图的Native Image id都相同。
  2. 当我旋转设备列表时,重绘并且原始图像ID会发生变化。
  3. 在几次旋转屏幕后发生OutOfMemmoryError!
  4. 因此,它遵循“没有人为按钮背景调用回收”。

    检查回收可以帮助解决onPause方法中的问题我检索用于后台的Bitmap并自己回收它。 OutOfMemmory不再出现。

    回收Views使用的每个drawable的任务吓到了我。我不敢相信android有 那种问题!

    是否有一种解决方案更容易为每个drawable调用回收?

1 个答案:

答案 0 :(得分:-1)

最好的解决方案是尽可能避免使用Buttons的drawables。