我猜这里有一个明显的答案......我对这个感到困惑:
当我所做的只是:
- 使用 Eclipse 的New Project选项创建了一个简单的“Hello World”项目。
- 并添加了 56 KiB 背景图片。
如果我取出android:background="@drawable/background4"线路,分配的内存将下降到 11.9 MiB。
- 系统分配这么多内存是否正常?我应该担心吗?
- 什么会占用这么多的堆空间?

我还对此进行了 MAT 报告,但我不确定从中得出什么结论:

提前致谢,
我猜这里有一个明显的答案......我对这个感到困惑:
当我所做的只是:
如果我取出android:background="@drawable/background4"线路,分配的内存将下降到 11.9 MiB。

我还对此进行了 MAT 报告,但我不确定从中得出什么结论:

提前致谢,
并添加了 56 KiB 背景图片。
不,您添加了一个 56 KiB文件,用作背景图像。
位图占用的实际堆空间是每个像素三个字节。使用 ~6MB 位图(每个 MAT 屏幕),您正在相当高分辨率的设备或模拟器上运行您的应用程序(1080p 应该产生 ~8MB,IIRC)。
AFAIK Android 会在您的布局膨胀时将您布局中的图像转换为字节数组。
它需要背景图像扩展以适应您的屏幕,这样做需要额外的内存..所以这就是它分配那么多内存的原因。我可能不对,但如果我错了,请告诉我。
好的,我在这里的数字可能是错误的,但任何高于 Android 3 的东西都会有 24mb(之前为 16mb,并且因设备而异)的内存堆限制。与每个 JVM 一样,内存将几乎全部分配,因此您的应用程序在其生命周期内不需要进行重新分配。
这并不是说您的应用程序实际上以 24mb 运行,而是在需要时分配了它。
我知道您还可以增加应用程序可以使用的堆内存量,但我建议您重新访问您的代码,以防您觉得有必要这样做。
显然,一旦您的应用程序关闭,所有这些都会被垃圾收集。
更新 如果需要,这是增加堆的方法:
android:largeHeap="true"