我有一个每行都有按钮的列表。我的应用程序中的按钮使用自定义主题和自定义可绘制对象(每个大约 0.5Kb png)。用户抱怨每周出现多次的 OutOfMemory 错误。
第一个想法是 Buttons 加载 BitmapDrawables 并且不回收它们。所以它导致超出本机内存。为了测试它,我用大约 300Kb(jpgs) 的更大图像更改了我的可绘制对象。在不同设备上测试 Android 版本 2.1-2.3.x
我所看到的:
- 每个按钮只有一个位图实例加载和使用。每个位图的 Native Image id 都是相同的。
- 当我旋转设备列表时会重绘并且本机图像 id 会发生变化。
- 屏幕旋转数次后发生 OutOfMemoryError!
因此,它遵循“没有人为按钮背景调用回收”。
为了检查回收可以帮助解决 onPause 方法中的问题,我检索用于背景的 Bitmap 并自己回收它。OutOfMemory 不再发生。
回收 Views 使用的每个可绘制对象的任务让我感到害怕。我不敢相信安卓有这样的问题!
有没有更容易为每个可绘制对象调用回收的解决方案?