wenju
wenju
  • 发布:2015-08-13 20:28
  • 更新:2017-01-14 12:27
  • 阅读:3477

plus.zip.compressImage压缩图片内存溢出,崩溃

分类:HTML5+

需求,让用户上传几张产品实拍图,有的需要调整角度;所以会使用plus.zip.compressImage进行图片旋转90度的操作

for循环执行如下方法:  
plus.zip.compressImage({  
                    src: imgArr[i],//照片原图  
                    dst: zipArr[i],//旋转后保存的图片  
                    rotate: degArr[i],//90度  
                    overwrite: true,  
                    quality: 100  
                },....

手机相机拍照的图大概2m一张,for循环旋转6张以上的图就奔溃了!!!
看log输出是sdk内部错误..
华为mate7测试 4.4.2系统..

2015-08-13 20:28 负责人:无 分享
已邀请:
wenju

wenju (作者) - https://www.mescroll.com -- 精致的下拉刷新和上拉加载组件

zip这个包感觉问题好多 感觉得自己用原生写 用js来调了~~(>_<)~~

wenju

wenju (作者) - https://www.mescroll.com -- 精致的下拉刷新和上拉加载组件

自己猜的原因:

压缩是异步的,
每执行一次plus.zip.compressImage,内部是创建一个线程,创建Bitmap

我for循环执行6次以上的压缩方法,内部创建了多个线程和Bitmap,导致内存溢出

不知道官方没有设置同步压缩的方法;就是等第一个压缩完后,再压缩另外一个
这样就可以有效避免内存溢出...

云海帆

云海帆 - 咨询问题请+Q1395641578

我是自己实现的同步机制,确保同时只有3-4个压缩在进行,否则很容易内存爆炸的

wenju

wenju (作者) - https://www.mescroll.com -- 精致的下拉刷新和上拉加载组件

@云海帆 确实得自己写个同步 一个一个的压缩... 我觉得官方如果做同步的设置就好了 从相册选择多张图回来就要压缩才能显示 所以如果是异步的话 没法直接用~~(>_<)~~ 用的人估计也没有预料到这个潜在的问题

DCloud_Android_ST

DCloud_Android_ST

图片压缩本身确实是异步处理的,同步机制后续会加入,不过例如for循环来调用这样消耗内存事情!还需要控制的。原生也是需要自己写同步逻辑才行!

rabet

rabet - 开发,技术服务

解决办法

http://ask.dcloud.net.cn/article/1130

该问题目前已经被锁定, 无法添加新回复