2

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

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

我所看到的:

  1. 每个按钮只有一个位图实例加载和使用。每个位图的 Native Image id 都是相同的。
  2. 当我旋转设备列表时会重绘并且本机图像 id 会发生变化。
  3. 屏幕旋转数次后发生 OutOfMemoryError!

因此,它遵循“没有人为按钮背景调用回收”。

为了检查回收可以帮助解决 onPause 方法中的问题,我检索用于背景的 Bitmap 并自己回收它。OutOfMemory 不再发生。

回收 Views 使用的每个可绘制对象的任务让我感到害怕。我不敢相信安卓有这样的问题!

有没有更容易为每个可绘制对象调用回收的解决方案?

4

1 回答 1

-1

最好的解决方案是尽可能避免为按钮使用可绘制对象。

于 2013-10-07T09:16:23.347 回答