出于好奇,我最近刚刚使用Eclipse Memory Analyzer测试了我的Android应用程序是否存在内存泄漏。
我遇到了一个奇怪的位图,大小为512 x 512像素,使用了大约1兆字节的设备堆内存。
我检查了我的可绘制文件夹,但找不到该大小(512 x 512)的位图。
我开始谷歌搜索,遇到了这个问题,用户解释了如何在内存分析器中获取“内存泄漏”引用背后的实际图像:
MAT(Eclipse Memory Analyzer)-如何从内存转储中查看位图
我遵循教程,在GIMP的帮助下,我提取了以下图像:
所以我的问题是:
注意事项:
更新:
在Selvin的建议和我个人认为这可能是系统问题的帮助下,我测试了我的另外两个应用程序。
我测试的两个应用程序在内存分析器中也显示了相同的位图,消耗的字节数完全相同:
此外,我还发现:
位图的源始终与应用程序的LAUNCHER Activity相关联。
那该怎么办?有办法摆脱它吗?
由于我在应用程序中执行内存密集型操作,因此我希望尽可能多的堆可用。
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