为什么普通图片分配了大量内存?

时间:2013-06-06 11:35:33

标签: android

我的应用程序在一些旧的Android设备(如GT-I9001)中使用了一点内存,大概是3.4MB。但是当我在HTC中运行它时,我的应用程序使用了更多的内存。

enter image description here

看,分配的内存为26.881MB,太大了,可用内存只有2.940MB。然后我使用MAT工具检查内存泄漏,我发现资源位图使用了mach内存。

我无法解释原因。我的应用程序经常内存不足。我想也许问题是由高屏幕分辨率引起的。如果有人也遇到了这个问题,请加入讨论,谢谢!

我解决了这个问题,并找到了一些理由:

enter image description here

我的start活动中的onCreate()函数,你可以看到断点。在调用setContentView(R.layout.welcome)加载布局xml之前,应用程序仅使用分配的内存3.4MB。然后应用程序运行到下一步,它使用分配的内存19MB。所以我认为这个问题必须由加载布局xml引起。

我修改了“welcome.xml”文件,删除了只有“RelativeLayout”的所有小部件

enter image description here

但程序也使用19MB内存。最后,我删除了RelativeLayout的背景,程序内存恢复正常大小,只使用3MB。

pictrue“loading_background.png”的大小只有21KB,我想也许高端设备的高屏幕分辨率改变了内存中的图片大小,我会尝试使用9.png图片。如果你理解了这部分问题,请加入讨论,谢谢!

4 个答案:

答案 0 :(得分:5)

如果你使用大图像作为背景,那不是内存泄漏。

文件大小无关紧要。当它加载到内存中时需要width * height of the image * 4bytes

尽可能使用小的9补丁图像或形状绘图。

答案 1 :(得分:5)

使用drawable-nodpi可以解决这个问题,看看这个:

Android background image memory usage

答案 2 :(得分:2)

尝试从3MB PNG文件制作位图。你会得到一张20MB的照片。这就是将图像从PNG转换为JPG的原因。实际上质量差别不大,但你会从记忆方面获益很多。

答案 3 :(得分:1)

只需将高分辨率图像添加到drawable中的xxhdpi文件夹即可。这可以防止Android将图像缩小到超大尺寸