我在每行上都有一个带有按钮的列表。我的应用程序中的按钮使用带有自定义可绘制对象的自定义主题(每个约0.5Kb png)。
用户抱怨OutOfMemory错误,该错误每周出现几次。
第一个想法是Buttons加载BitmapDrawables而不回收它们。因此,这导致超出本机内存。
为了进行测试,我将绘画对象更改为300Kb(jpgs)以上的较大图像。
在不同的设备上测试Android版本2.1-2.3.x
我所看到的:
每个按钮仅加载和使用一个位图实例。每个位图的本机图像ID均相同。
当我旋转设备列表时,将重新绘制图像,并且本机图像ID也会更改。
屏幕旋转几次后,发生OutOfMemmoryError!
因此,遵循“没有人调用回收按钮背景”。
检查回收可以帮助解决onPause方法中的问题,我检索了用于背景的Bitmap并自己回收了它。 OutOfMemmory不再发生。
回收Views使用的每个可绘制对象的任务使我感到恐惧。我不敢相信android有
那样的问题!
有没有比每个可绘制对象更容易调用回收的解决方案?
最佳答案
最好的解决方案是尽可能避免使用Button的可绘制对象。