在Android模拟器中运行GridView和ContextMenu中的示例。报告内存溢出错误(OutOfMemoryError)。查了一下Android reference。默认的delvik堆内存是24MB。同样的示例在Nexus One下就能测试通过。Nexus One的堆内存是32MB:
模拟器报错类似这样:
01-03 17:49:14.938: ERROR/AndroidRuntime(398): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
虽然示例中考虑了通过SoftReference提高内存使用能力,当内存不足的时候释放SoftReference的引用对象。但是一屏要显示10个图像,这个需求是刚性的。上面的内存溢出就是在这种情况下发生的,比如只显示了6个图片就报告错误了。
找到avd文件配置的地方,对于我的环境:
对于windows用户,应该在用户目录下的.android目下可以找到类似的内容。
找到config.ini文件,修改(增加)内容:
hw.ramSize=512
vm.heapSize=32
这样就和Nexus One的配置相同了,当时想,可依然报错。估计delvik虚拟机在模拟器里的实现和设备上的还是有区别的。
将堆内存加大:
hw.ramSize=512
vm.heapSize=64
再运行应用,成功了。