android一个拍照程序开发中遇到的问题

需求:邪恶相机大笑

要求拍照时没有预览界面,每隔一定时间自动snap一张。


这种应用应该做成service或者widget很合适,现在只是用Activity做的。


按照某教程上给的例子写的,大致流程如下:

在AndroidManifest.xml中定义所需权限——写sdcard权限,camera权限;

在xml中放SurfaceView供预览使用;

代码中获得SurfaceView的SurfaceHolder,给holder注册回调;

在回调的surfaceCreated方法中Camera.open,setParameters,setPreviewDisplay(holder);

startPreview;

takePicture,takePicture之后会自动stopPreview,如果要继续拍照需要再次startPreview。


第一次尝试把预览部分的SurfaceView等步骤去掉,因为觉得Preview和takePicture应该是2个独立的动作。去掉后发现不行,加上后可以拍照了。

但是有其它问题,只能拍照一张,第二次调用takePicture挂掉。看代码百思不得其解,最后仔细看SDK,说得很详细:一定不要在takePicture的回调返回之前再次startPreview!而我几次尝试都是把startPreview放在takePicture调用之后或者回调函数的最后的。我把它放到takePicture之前,可以连续拍照了。

还是有问题,连续拍照几张后继续死。看log,死在takePicture里了,还好有源码,发现对应的是一个申请内存语句。我又冥思苦想了一番,内存泄露?不能,代码肯定没问题,GC也应该没问题,那应该是碎片导致?因为每张照片需要申请约2MB的内存,很有可能是碎片导致,回头一想又不太可能,因为之前每次都是申请差不多大小的内存,GC回收后这块内存应该是可以重复用的啊。想得头疼,暂时一放。

昨天就进行到这了,今天继续。

几个疑问:

1.preview和takePicture必须绑定吗?不合理;

2.takePicture之后再次startPreview的时机问题,应该takePicture回调完成给个通知才好吧。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值