我正在分析我们应用程序的内存使用情况,发现奇怪Drawables
,它不断“吃掉”几兆字节的堆。以下是MAT的几张截图:
具有 2 个非常大的位图的支配树
上述位图之一的 GC 根路径
无论我使用我们的应用程序多长时间或多密集,此位图总是出现在我的手机(Samsung Galaxy Nexus,OS 4.1.1 )的堆转储中。
我已经尝试使用 MAT 搜索此位图的来源 - 没有运气。我能找到的所有有用信息都是width
位height
图,都是 512x512:
但是我们的应用程序没有任何单一的 512x512 可绘制对象。我认为这是一些“系统”可绘制对象。但究竟是什么?为什么它们这么大?
我还查看了android.content.res.Resources
类的源代码,搜索字段的用法sPreloadedDrawables
- 也没有运气。我从内存转储中得到的只是key
来自sPreloadedDrawables
数组,但我无法从这个键中确定文件名或资源 ID。
所以,我的问题是:
如何确定此位图的名称或 ID?
加载这个巨大的位图是什么,为什么它们总是留在内存中?
更新:
我找到了一种从内存转储中查看此位图的方法。这两个位图是一个简单的渐变,一个是黑色,另一个是白色。我想这是ICS 主题Holo.Light
的资源。Holo.Dark
但是我的第二个问题仍然是实际的:为什么这个位图总是留在内存中?有没有办法上传或回收它们?