android camera out of memory安卓照相机OOM问题的解决

来源:互联网 发布:java中document.form 编辑:程序博客网 时间:2024/05/16 06:07

最近在学习安卓照相机,在网上找了一些demo ,但发现了大多数调用camera api的demo存在OOM问题,当拍摄第一张照片的时候程序正常,拍摄第二张时出现以下问题:

dalvik out of memory

其根本原因是


Bitmap bmp=BitmapFactory.decodeByteArray(data, 0, data.length); 

 

使用BitmapFactory时,手机拍摄的图片太大了,系统为BitmapFactory分配的内存空间只有6M(这个数据可能不准,不过没关系,反正就是内存不足),当传入大的文件时就会出现OOM问题,导致程序异常退出。


目前找到的解决方法主要有以下两个

方法一:每次使用完后立即调用以下代码,在下一次调用BitmapFactory前清除bmp。测试发现,本来拍2张就能异常退出的程序,现在拍19张或者20张的时候异常退出,说明每次清除bmp的时候BitmapFactory并没有回复到初始状态,还是有内存残留。


bmp.recycle();

System.gc();


方法二:

选择camera输出格式为jpeg,直接保存拍照的data。用这个方法可以完美避开BitmapFactory。测试发现,本来拍2张就能异常退出的程序,现在拍到我手软了(大约20多张)还没有出现异常退出现象。主要代码如下:



Parameters param=camera.getParameters();

param.setPictureFormat(FORMAT);

camera.setParameters(param);


本文参考的camera程序为http://blog.csdn.net/jianghuiquan/article/details/8569187 (当然这个是有OOM问题滴)

作者修改后的源代码(方法二):http://download.csdn.net/detail/iywgqt/7866477 (记得点赞,thanks)


欢迎各位小伙伴转载,但请保留原文地址,谢谢。

0 0
原创粉丝点击