帖子
帖子
用户
博客
课程
显示全部楼层
3
帖子
0
勋章
12
Y币

[BUG] api.getPicture在高版本IOS系统中大量拍照闪退

[复制链接]
发表于 2017-5-8 14:54:10
问题描述:在IOS较高版本(10.3.1)中,使用api.getPicture拍摄100张照片左右就会闪退,ipad air2,使用内存监控发现空闲内存一直降低,直到闪退。同样app在低版本(比如ios7/8)下拍照就不存在闪退问题。

代码:
api.getPicture({
                sourceType : 'camera',
                encodingType : 'jpg',
                mediaValue : 'pic',
                saveToPhotoAlbum : false,
                quality : 50,
                targetWidth : 1820,
                targetHeight : 1820
        }, function(ret, err) {

                ...

原因分析:
估计api.getPicture模块没有适配IOS高版本拍照功能,内存没有释放。

请官方支持一下!!!


380
帖子
4
勋章
6
Y币
我们确认一下
28
帖子
1
勋章
1万+
Y币
什么应用需要这么多次拍摄?拍摄完成做了什么操作
3
帖子
0
勋章
12
Y币
技术咨询-Kenny 发表于 2017-5-8 15:40
什么应用需要这么多次拍摄?拍摄完成做了什么操作

业务需要,多的时候每天拍1000张照片上传到服务器。现在问题是:拍完照啥都不干接着再拍照(循环调用api.getpicture模块),大约100张之后闪退。
3
帖子
0
勋章
12
Y币
比较完整的代码如下:
function takePhotoUpload(p, callback) {
        var defaultPara = {
                quality : 50,
                targetWidth : 1820,
                targetHeight : 1820
        };
        p = $.extend(true, {}, defaultPara, p);
        api.getPicture({
                sourceType : 'camera',
                encodingType : 'jpg',
                mediaValue : 'pic',
                saveToPhotoAlbum : false,
                quality : p.quality,
                targetWidth : p.targetWidth,
                targetHeight : p.targetHeight
        }, function(ret, err) {
                if (ret && ret.data) {
                        var returnUrl = ret.data;
                        api.saveMediaToAlbum({
                                path : returnUrl
                        }, function(ret, err) {
                                if (ret) {

                                        api.actionSheet({
                                                title : '',
                                                cancelTitle : '取消',
                                                buttons : ['继续拍照', '选择照片']
                                        }, function(ret, err) {
                                                if (ret.buttonIndex == 1) {
                                                        //递归继续拍照
                                                        takePhotoUpload(p, callback);
                                                } else if (ret.buttonIndex == 2) {
                                                        p.fileType = "picture";
                                                        var timeDelay = 200;
                                                        setTimeout(function() {
                                                                //选择拍摄的照片
                                                                selectLocalFile(p, callback);
                                                        }, timeDelay);
                                                }
                                        });
                                } else {
                                        $toast("保存到相册失败");
                                }
                        });
                }
        });
}
28
帖子
1
勋章
1万+
Y币
小湖湖 发表于 2017-5-8 15:50
比较完整的代码如下:
function takePhotoUpload(p, callback) {
        var defaultPara = {

内存问题是个老问题,任何系统、应用都可能出现,能够连续拍摄100多张照片才闪退,说明程序基本上是属于正常状态,当然理论上是可以拍无数张,但你不能保证系统会全部回收掉之前使用的内存。所以,这个和你手机本身运行总内存、当前剩余内存都有关系,不同系统版本也有差别,光就系统占用内存而言,10点几的系统肯定比低版本占用内存多得多。

另外,拍照的时候就有个是否保存到相册的参数saveToPhotoAlbum,不用拍完照再调用方法保存到相册。
3
帖子
0
勋章
12
Y币
技术咨询-Kenny 发表于 2017-5-8 16:39
内存问题是个老问题,任何系统、应用都可能出现,能够连续拍摄100多张照片才闪退,说明程序基本上是属于 ...

据说IOS高版本和低版本的系统相机有较大改动,可能我们api.getPicture模块在高版本下内存释放没处理好导致大量拍照闪退,还是希望官方能够再精益求精,“彻查到底”。
您需要登录后才可以回帖 登录

本版积分规则