我正在开发相机应用程序。第一次,如果我捕获图像其工作正常,但如果我再次拍照,它会抛出错误
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? 请帮忙.. 提前谢谢..
答案 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。