【发布时间】:2012-01-21 14:53:36
【问题描述】:
我有一个带有菜单的应用程序,其中菜单项是来自ViewAnimator 视图的屏幕截图。一切正常。我用这个简单的片段做截图,使用许多例子中写的绘图缓存:
// Drawing cache is off, so build it manually and create scaled bitmap
layout.buildDrawingCache();
Bitmap bm = layout.getDrawingCache();
Bitmap bm_small = Bitmap.createScaledBitmap(bm, item_width, item_height, true);
在同一个函数中,我尝试释放用于创建屏幕截图的所有内存:
layout.destroyDrawingCache();
bm.recycle();
bm = null;
但不幸的是,垃圾收集器没有释放这个位图内存。我还使用 HPROF 内存分析来找到一些对 Bitmap 的引用,这些引用无法被释放但我没有成功。重要的信息是,我正在为 Honeycomb Android 3.0 开发,所以屏幕截图非常大 - 每个屏幕截图占用大约 3MB 的内存并且不释放它。
我不明白,为什么 recycle 在这个例子中不起作用。我怀疑,我的设置中有一些非常特殊的问题:Android 3.0 Honeycomb + 启用硬件加速 + 启用大堆 + 使用绘图缓存。我发现的所有提示都没有帮助。
请您解释一下,为什么recycle 在这种情况下不起作用?任何帮助将不胜感激。
【问题讨论】:
标签: android memory-leaks garbage-collection bitmap