我猜这里有一个明显的答案......我对此感到困惑:
为什么我完成所有操作后会分配17.8 MiB堆内存:
如果我取出android:background="@drawable/background4"
行,分配的内存将降至11.9 MiB。
我也对它进行了MAT报告,但我不确定从中得出什么结论:
提前致谢,
答案 0 :(得分:4)
并添加了56 KiB背景图片。
不,您添加了用作背景图像的56 KiB 文件。
位图消耗的实际堆空间是每个像素三个字节。使用~6MB位图(根据您的MAT屏幕),您在相当高分辨率的设备或模拟器上运行您的应用程序(1080p应该导致~8MB,IIRC)。
答案 1 :(得分:1)
AFAIK Android会在您的布局膨胀时将布局中的图像转换为字节数组。
它需要扩展背景图像以适应您的屏幕,这需要额外的内存..这就是它分配那么多内存的原因。我可能不对,但如果我错了就告诉我。
答案 2 :(得分:0)
好吧,我在这里的数字可能有问题,但是Android 3以上的任何东西都会有24mb(之前为16mb,因设备而异)对内存堆的限制。与每个JVM一样,内存几乎全部分配,因此您的应用程序不需要在其生命周期内进行重新分配。
这并不是说您的应用程序实际上以24mb运行,但如果需要则分配它。
我知道您也可以增加应用程序可以使用的堆内存量,但我建议您重新访问代码,以备您认为有必要这样做。
显然,只要你的申请被关闭,所有这些都会被垃圾收集。
<强>更新强> 以下是如果需要增加堆的方法:
android:largeHeap="true"