6

我猜这里有一个明显的答案......我对这个感到困惑:

当我所做的只是:

  1. 使用 Eclipse 的New Project选项创建了一个简单的“Hello World”项目。
  2. 并添加了 56 KiB 背景图片。

如果我取出android:background="@drawable/background4"线路,分配的内存将下降到 11.9 MiB。

  • 系统分配这么多内存是否正常?我应该担心吗?
  • 什么会占用这么多的堆空间?

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

提前致谢,

4

3 回答 3

4

并添加了 56 KiB 背景图片。

不,您添加了一个 56 KiB文件,用作背景图像。

位图占用的实际堆空间是每个像素三个字节。使用 ~6MB 位图(每个 MAT 屏幕),您正在相当高分辨率的设备或模拟器上运行您的应用程序(1080p 应该产生 ~8MB,IIRC)。

于 2013-03-14T11:16:10.323 回答
1

AFAIK Android 会在您的布局膨胀时将您布局中的图像转换为字节数组。

它需要背景图像扩展以适应您的屏幕,这样做需要额外的内存..所以这就是它分配那么多内存的原因。我可能不对,但如果我错了,请告诉我。

于 2013-03-14T09:03:53.103 回答
0

好的,我在这里的数字可能是错误的,但任何高于 Android 3 的东西都会有 24mb(之前为 16mb,并且因设备而异)的内存堆限制。与每个 JVM 一样,内存将几乎全部分配,因此您的应用程序在其生命周期内不需要进行重新分配。

这并不是说您的应用程序实际上以 24mb 运行,而是在需要时分配了它。

我知道您还可以增加应用程序可以使用的堆内存量,但我建议您重新访问您的代码,以防您觉得有必要这样做。

显然,一旦您的应用程序关闭,所有这些都会被垃圾收集。

更新 如果需要,这是增加堆的方法:

android:largeHeap="true"
于 2013-03-14T09:04:04.653 回答