如何清除堆?

时间:2011-05-02 05:43:06

标签: android

我正在开发相机应用程序。第一次,如果我捕获图像其工作正常,但如果我再次拍照,它会抛出错误

  

ERROR / dalvikvm-heap(2398):10077696字节的外部分配对于这个过程来说太大了。“VM不会让我们分配10077696字节”,最后“05-02 05:35:38.390:ERROR / AndroidRuntime( 2398):致命的例外:主要   05-02 05:35:38.390:ERROR / AndroidRuntime(2398):java.lang.OutOfMemoryError:位图大小超过VM预算

和应用程序强制关闭..如何处理这个如何清除堆和vm? 请帮忙.. 提前谢谢..

2 个答案:

答案 0 :(得分:4)

我找到了答案 我使用了以下代码:

BitmapFactory.Options bfOptions=new BitmapFactory.Options();

                bfOptions.inDither=false;                     //Disable Dithering mode

                bfOptions.inPurgeable=true;                   //Tell to gc that whether it needs free memory, the Bitmap can be cleared

                bfOptions.inInputShareable=true;              //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future

                bfOptions.inTempStorage=new byte[32 * 1024]; 
   CameraTricks.SdCardImage= BitmapFactory.decodeFile(CameraTricks.yu,bfOptions);
CameraTricks.yu is my path to bitmap

答案 1 :(得分:1)

你没有。你可以软复位设备,但我怀疑这会有什么好处。 Android的垃圾收集器应该处理它。

最有可能的是,您的应用程序使用了太多内存进行某些操作。您可以使用DDMS检查内存消耗(read about it here)。

您可以在所有这些链接中阅读类似问题:

看起来一个共同的主题是加载几个大图像。确保不再保留对不再使用的图像(或任何其他大对象)的引用,以便垃圾收集器可以恢复该内存。例如,使用Bitamp.recycle()

最后,请务必阅读文章Avoiding Memory Leaks