我正在研究的项目使用了几个"高分辨率"背景(请注意引号).只是为了进入情境,其中一个是640x935 1.19M PNG文件.据我所知,即使Android将图像作为原始数据解压缩到内存中,这应该是:
640 x 935 x 4bytes = 2.39M
我的项目中存在内存问题,我无法理解,希望有人可以对此事进行阐述.我将列出我正在开发的两个设备以及一些结果.
为了确保这不是次要问题,我在第一次创建活动时没有加载背景,然后当用户按下按钮时,它所做的只是:
findViewById(R.id.completed_block_background).setBackgroundResource(R.drawable.blockbackgroundbottom1);
然后,在进程上使用带有"Update Heap"的DDMS(并且首先强制GC确保这不会成为问题),我得到以下内存结果:
Nexus S:从18M上升到26M(8M差异)
Galaxy Nexus:从28M到39M(11M差异)
因此,正如您所看到的,将理论上2.39M未压缩的图像放入背景实际上会增加8M和11M的内存使用量.有人可以解释为什么这个以及是否有任何解决方案?
我能找到的唯一解决方案是使用位图将分辨率减半或降低通道格式(到目前为止,这就是我所做的,将它们切换为565 RGB,但这会产生一些我无法接受的条带问题).
如果没有什么可以做的话,我也会接受解释为什么会这样.提前致谢.