使用1 Mb堆的奇怪位图

Phi*_*oda 14 heap android memory-management bitmap eclipse-memory-analyzer

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

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

在此输入图像描述

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

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

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

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

在此输入图像描述

所以我的问题是:

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

笔记:

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

更新:

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

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

在此输入图像描述

此外,我能够发现:

Bitmap的源始终与应用程序的LAUNCHER活动相关联.

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

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

Rom*_*Guy 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

  • 有没有办法在MAT中排除Zygote分配的对象?还是在转储期间? (3认同)