2

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

在此处输入图像描述

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

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

我调试了这个问题,发现了一些原因:

在此处输入图像描述

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

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

在此处输入图像描述

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

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

4

4 回答 4

5

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

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

尽可能使用小的 9-patch 图像或形状可绘制对象。

于 2013-06-09T20:13:49.477 回答
5

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

Android背景图片内存使用情况

于 2013-06-16T02:54:08.093 回答
2

只需尝试从 3MB PNG 文件制作位图。您将获得一张 20MB 的图片。这就是为什么最好将图像从 PNG 转换为 JPG 的原因。质量实际上并没有太大差异,但是您将从内存方面受益匪浅。

于 2013-07-09T06:29:25.847 回答
1

只需将高分辨率图像添加到可绘制的 xxhdpi 文件夹中。这可以防止 android 将图像放大到超大尺寸

于 2016-03-01T17:39:05.327 回答