我的应用程序使用了一点内存,大约 3.4MB,在一些旧的 android 设备上,比如 GT-I9001。但是当我在 HTC one 中运行它时,我的应用程序使用了更多的内存。
看,分配内存26.881MB,太大了,空闲内存只有2.940MB。然后我用MAT工具检查内存泄漏,我发现资源位图使用mach内存。
我无法解释原因。我的应用程序经常内存不足。我想也许问题是由高屏幕分辨率引起的。如果有人也遇到这个问题,请加入讨论,谢谢!
我调试了这个问题,找到了一些原因:
我的启动activity中的onCreate()函数,你可以看到断点。在调用 setContentView(R.layout.welcome) 加载布局 xml 之前,应用程序仅使用分配的内存 3.4MB。然后应用程序运行到下一步,它使用分配的内存 19MB。所以我认为这个问题一定是加载layout xml引起的。
我修改了“welcome.xml”文件,删除了所有只有“RelativeLayout”的小部件
但该程序还使用 19MB 内存。最后,我删除了RelativeLayout的背景,程序内存恢复正常大小,只用了3MB。
图片“loading_background.png”的大小只有21KB,我想可能是高端设备的高屏幕分辨率改变了内存中的图片大小,我会尝试使用9.png图片。如果您了解这部分问题,请加入讨论,谢谢!
最佳答案
如果你使用大图像作为背景,这不是内存泄漏。
文件大小无关紧要。当它加载到内存中时,它需要 width * 图像的高度 * 4bytes
。
尽可能使用小的 9 block 图像或可绘制的形状。
关于android - 为什么正常的图片分配了很多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16961096/