使用1 Mb堆的奇怪位图

时间:2013-08-29 15:55:20

标签: android memory-management bitmap heap eclipse-memory-analyzer

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

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

enter image description here

我检查了我的drawables文件夹,但找不到那个大小的位图(512 x 512)。

我开始使用谷歌搜索并遇到了这个问题,用户解释了如何在Memory Analyzer中的“内存泄漏”参考后面获取实际的Image:

MAT (Eclipse Memory Analyzer) - how to view bitmaps from memory dump

我按照教程并在GIMP的帮助下,提取了以下图片:

enter image description here

所以我的问题是:

  • 那是什么?
  • 在我的应用程序堆中做了什么?
  • 我该如何摆脱它?
  • 其他人的堆中是否有相同的位图?

注意:

  • 在我的drawables文件夹中没有看起来像这样的位图
  • 我的应用使用的最大位图是140 x 140像素
  • 我觉得这个Bitmap不知何故来自系统
  • 在应用程序启动后,Bitmap就在堆中 - 没有任何用户交互
  • 我正在调试HTC One S,Android 4.1 Cyanogen Mod(屏幕540 x 960)
  • 我没有使用外部库

更新

Selvin's建议的帮助下,以及我的个人感觉,这可能是一个系统问题,我测试了我的另外两个应用程序。

  

我测试的两个应用程序在Memory Analyzer中也显示了相同的Bitmap,消耗的字节数完全相同:

enter image description here

此外,我能够找到:

  

Bitmap的来源始终与应用的LAUNCHER活动相关联。

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

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

1 个答案:

答案 0 :(得分:17)

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