uni-app 部分安卓调用 uni.chooseImage 时应用闪退 用户相册中存在大量高清大图

uni-app 部分安卓调用 uni.chooseImage 时应用闪退 用户相册中存在大量高清大图

示例代码:

uni.chooseImage({  
    count: 6, //默认9  
    sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有  
    sourceType: ['album'], //从相册选择  
    success: function (res) {  
        console.log(JSON.stringify(res.tempFilePaths));  
    }  
});

操作步骤:

  • 相册中存在大量高清大图,然后选择图片

预期结果:

  • 选择图片不闪退

实际结果:

  • 选择图片闪退

bug描述:

用户视频如图所示,选择图片的界面显示了,但是图片列表一直没加载出来,然后app闪退

示例图片

AF76637AFCFE262D0F742FF68835690A.mp4_.zip


### 表格:开发环境和项目信息

| 信息           | 值                          |
|----------------|-----------------------------|
| 产品分类       | uniapp/App                  |
| PC开发环境     | Mac                         |
| PC操作系统版本 | macOS Big Sur 11.2.3        |
| HBuilderX类型  | 正式                        |
| HBuilderX版本  | 3.1.22                      |
| 手机系统       | Android                     |
| 手机系统版本   | Android 11                  |
| 手机厂商       | OPPO                        |
| 手机机型       | OPPO A52                    |
| 页面类型       | nvue                        |
| 打包方式       | 云端                        |
| 项目创建方式   | HBuilderX                   |

更多关于uni-app 部分安卓调用 uni.chooseImage 时应用闪退 用户相册中存在大量高清大图的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

身边有台安卓的机器,相册图片也很多,但是图片尺寸和质量与真实用户的差很多很多

首次在app内选择相册图片,列表加载很慢,最终能加载
杀死app后,重新打开点击选择相册图片,列表加载速度略有提升

目前不止一个安卓客户反馈选择相册闪退问题

更多关于uni-app 部分安卓调用 uni.chooseImage 时应用闪退 用户相册中存在大量高清大图的实战教程也可以访问 https://www.itying.com/category-93-b0.html


appid提供一下

回复 DCloud_Android_ST: 加到机密信息里面了

回复 青阳_1900: 你在什么设备上什么时间复现了问题 告诉我下我通过崩溃日志查下

回复 DCloud_Android_ST: 时间是 2021-08-10 20:18:00 ~ 20:20:00,设备是安卓,型号是OPPO A52,我附件里面也有视频

回复 青阳_1900: 没找到相关崩溃日志。描述一下相册图片内容都是相机拍摄的图片还是有些是相机之外存储的高清大图?

回复 DCloud_Android_ST: 我们这边有台oppo k9 500多照片没复现问题

回复 DCloud_Android_ST: 加了友盟的日志,你再看下,相册图片用户会拍摄,也会保存,可能有GIF图片

回复 青阳_1900: gif图也试了。你的设备能必现问题吗。 还有不要回复大量图片会影响正常阅读

回复 DCloud_Android_ST: 问了客户,他相册图片5626张,包含若干GIF

难受,uni集成友盟的统计数据感觉少很多东西,上面的时间不对 异常时间是 08-10 20:19 到 08-10 20:22 , 附上用户设备型号截图

这是一个典型的内存溢出问题。当相册中存在大量高清大图时,uni.chooseImage 在加载图片预览时会占用大量内存,导致应用崩溃。

解决方案:

  1. 限制图片数量和质量:

    uni.chooseImage({
        count: 3, // 减少选择数量
        sizeType: ['compressed'], // 只使用压缩图
        sourceType: ['album'],
        success: function (res) {
            console.log(JSON.stringify(res.tempFilePaths));
        }
    });
    
  2. 分批处理图片: 如果必须选择多张图片,建议分多次选择,每次选择后先处理并释放内存。

  3. 使用原生插件: 考虑使用支持大图处理的原生插件,如 uni-app 官方提供的 uni-media 插件,或第三方图片选择插件。

  4. 优化图片加载:nvue 页面中,可以使用 list 组件和 image 组件的 lazy-load 属性来优化图片加载,避免一次性加载所有图片。

  5. 检查内存使用:HBuilderX 中开启调试模式,使用 Chrome DevTools 监控内存使用情况,确保没有内存泄漏。

  6. 更新 HBuilderX 和 uni-app 版本: 确保使用最新版本的 HBuilderXuni-app 框架,以获得更好的兼容性和性能优化。

代码示例(优化后):

uni.chooseImage({
    count: 3,
    sizeType: ['compressed'],
    sourceType: ['album'],
    success: function (res) {
        // 处理图片,避免内存占用过高
        res.tempFilePaths.forEach((path, index) => {
            // 压缩或裁剪图片
            uni.compressImage({
                src: path,
                quality: 80,
                success: compressRes => {
                    console.log(compressRes.tempFilePath);
                }
            });
        });
    }
});
回到顶部