提问者:小点点

使用1 Mb堆的奇怪位图


出于好奇,我最近刚刚使用Eclipse Memory Analyzer测试了我的Android应用程序是否存在内存泄漏。

我遇到了一个奇怪的位图,大小为512 x 512像素,使用了大约1兆字节的设备堆内存。

我检查了我的可绘制文件夹,但找不到该大小(512 x 512)的位图。

我开始谷歌搜索,遇到了这个问题,用户解释了如何在内存分析器中获取“内存泄漏”引用背后的实际图像:

MAT(Eclipse Memory Analyzer)-如何从内存转储中查看位图

我遵循教程,在GIMP的帮助下,我提取了以下图像:

所以我的问题是:

  • 那是什么?
  • 它在我的应用程序堆中做什么?
  • 我怎么摆脱它?
  • 还有其他人在他的堆中有相同的位图吗?

注意事项:

  • 在我的可绘制文件夹中没有这样的位图
  • 我的应用程序使用的最大位图是140 x 140像素
  • 我有一种感觉,这个位图不知何故来自系统
  • 位图在应用程序启动后立即堆积-没有任何用户交互
  • 我正在调试HTCOne S,Android 4.1 Cyangen Mod(屏幕540 x 960)
  • 我没有使用外部库

更新:

在Selvin的建议和我个人认为这可能是系统问题的帮助下,我测试了我的另外两个应用程序。

我测试的两个应用程序在内存分析器中也显示了相同的位图,消耗的字节数完全相同:

此外,我还发现:

位图的源始终与应用程序的LAUNCHER Activity相关联。

那该怎么办?有办法摆脱它吗?

由于我在应用程序中执行内存密集型操作,因此我希望尽可能多的堆可用。


共1个答案

匿名用户

Android使用的默认窗口背景是512x512图像(您在深色主题下看到的蓝暗渐变或浅色主题下的灰白色渐变)。在有能力的设备上,从Android 4.2开始,此图像将替换为过程渐变。

请注意,此位图通常加载在Zygote中并由所有应用程序共享。如果转储不排除Zygote分配的对象,它可能会显示在堆转储中。

如果你感兴趣的话,这是我正在谈论的两个512x512背景:

https://github.com/android/platform_frameworks_base/blob/jb-mr0-release/core/res/res/drawable-nodpi/background_holo_dark.png

https://github.com/android/platform_frameworks_base/blob/jb-mr0-release/core/res/res/drawable-nodpi/background_holo_light.png