我有一个菜单应用程序,其中菜单项是ViewAnimator
的视图的屏幕截图。一切工作正常。我做screeshots这个简单的sniplet,使用绘图缓存写在许多例子:无法在Android 3.0中释放内置图形缓存的内存
// 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的内存,并且不会释放它。
我不明白,为什么回收在这个例子中不起作用。我怀疑,在我的设置中有一些非常特殊的问题:Android 3.0蜂窝+硬件加速启用+大堆启用+使用图形缓存。我发现的提示都没有帮助。
请你能解释一下,为什么recycle
在这种情况下不起作用?任何帮助将非常感激。
感谢您的回答。据我所知,我不能使用更小的位图,因为我必须从整个布局制作截图。而SoftReference解决方案在我看来也不适用,因为我不存储任何对Bitmap的引用:/ – 2011-12-16 00:07:42