uni-app选择图片API uni.chooseImage(OBJECT) 打开相册后大概5-10秒系统弹出无响应 点击等待可正常使用
uni-app选择图片API uni.chooseImage(OBJECT) 打开相册后大概5-10秒系统弹出无响应 点击等待可正常使用
示例代码:
count: 1,
sizeType: ['original'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function (res) {
uni.compressImage({
src: res.tempFilePaths[0],
quality: 60,
success: res => {
const uploadTask = uni.uploadFile({
url: url,
filePath: res.tempFilePath,
name: 'file',
header: {
'Authorization': 'Bearer ' + uni.getStorageSync('token')
},
success: (uploadFileRes) => {
let u_data = JSON.parse(uploadFileRes.data)
if(u_data.status == 200) {
editUserAvatar({avatar: u_data.data.data}).then(edit_res => {
if(edit_res.status == 200) {
that.$store.state.userData.avatar = u_data.data.data
} else {
uni.showToast({
icon: 'none',
title: '修改失败,请稍后重试!'
})
}
})
} else {
uni.showToast({
icon: 'none',
title: '上传失败,请稍后重试!'
})
}
}
})
that.viewProgress = true
uploadTask.onProgressUpdate((res) => {
that.progress = res.progress
if (res.progress >= 100) {
that.viewProgress = false
}
})
}
})
}
})```
操作步骤:
手机中图片多一点,7000张以上,少的话好像没问题,之后调起图片选择api,手机系统是Android11
预期结果:
调起API快速显示相册,长时间等待选择图片,无系统弹出无响应弹框
实际结果:
加载图片较慢(3-5s),加载图片期间不能返回,加载图片后5-10s出现无响应系统弹窗,点击等待后可以继续使用,但是有这个弹窗很麻烦。
bug描述:
正常调用uni.chooseImage(OBJECT) API,进入相册选择图片(图片大概在6-7千左右),默认打开的是所有图片分类,加载图片需要等待3-5s左右,加载显示出图片后大概5-10s后系统层弹出 无响应,但是点击等待可以继续使用。
猜测是因为调起选择图片时,APP持续等待触发了系统层无响应事件,希望能够解决和优化图片选择,很重要的API,看到社区有人询问但是没人回答,就很难过。
更多关于uni-app选择图片API uni.chooseImage(OBJECT) 打开相册后大概5-10秒系统弹出无响应 点击等待可正常使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
HX3.2.9已修复该问题
更多关于uni-app选择图片API uni.chooseImage(OBJECT) 打开相册后大概5-10秒系统弹出无响应 点击等待可正常使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你好 请试用一下https://www.html5plus.org/doc/zh_cn/gallery.html#plus.gallery.pick 看看是否还会卡很久
还是那种,10s内弹出无响应
好像不单单是我这个手机的型号,看别人手机也有这种问题,照片多的话必会出现无响应,照片少的话没啥问题
回复 1***@qq.com: 手机设备中都是什么图片 理论图片数量不会对图片预览有影响才对
回复 DCloud_Android_ST: 正常的截图照片,还有一些应用内部的素材图,显示预览图比较慢,几秒之后就弹出无响应了,同品牌手机不同型号照片少的时候测试没有弹出无响应,社区看到别的品牌手机android11 也有这种情况
回复 DCloud_Android_ST: https://ask.dcloud.net.cn/question/120660 这个我联系他了,他那边最后也没解决,只能硬着头皮用了
回复 DCloud_Android_ST: 或者有没有其他选择图片的方式,插件市场有个支付宝扫码插件里面选择相册是打开文件系统,那个就没问题,但是那个是和文件混在一起的
回复 1***@qq.com: 好的 我们研究研究
回复 DCloud_Android_ST: 好的
回复 DCloud_Android_ST: 另外一个安卓机 一加8Tpro 2700多张照片,一切正常
回复 DCloud_Android_ST: 刚试着把一些应用内部的素材小图删掉之后,就可以正常使用了,删除了3000多张小图,你们测试的时候 可以试一下多放点2020 5050 150 * 150之类的小图
回复 1***@qq.com: 好的
和之前的问题 https://ask.dcloud.net.cn/question/128641 类似,我这边是用户反馈选择相册会闪退,某些用户必现,但是友盟的日志一直采集不到
身边有台 realme 的安卓机,不会闪退,但是打开的时候会等待5秒左右才出现图片列表,本地相册差不多8k张图片。
回复 青阳_1900: 应该跟我这情况一样,我手机里6千多张图片,我朋友手机几百张图片没啥问题
市场里面有三方原生插件,可以选择图片,但是都收费,就没没有尝试了
回复 1***@qq.com: 看了 uni.chooseImage 的源码,最终实现唤起的是hmlt5plus的 plus.gallery.pick 也是原生实现,所以他上面让你直接用 pick 其实想缩小问题范围,根因还是原生实现存在性能问题,优化没做好
问题已确认 下个版本会修复该问题
确实,10s左右弹出无响应,还有在选择较大图片时,APP会崩溃自动重启
这个问题是由于Android系统对应用主线程响应时间的监控机制导致的。当uni.chooseImage()加载大量图片时(7000+张),系统相册组件需要扫描和渲染大量图片数据,这个过程会阻塞主线程,超过Android系统的ANR(Application Not Responding)检测阈值(通常5秒),从而触发系统弹窗。
解决方案:
-
优化调用时机:避免在页面初始化或用户频繁操作时调用,可考虑延迟加载或用户主动触发。
-
分批加载建议:虽然uni.chooseImage()本身不支持分批加载,但可以提示用户选择特定相册分类而非"所有图片"。部分Android系统相册会按时间或文件夹分类,选择子分类可减少一次性加载数量。
-
使用原生插件:对于图片数量特别大的场景,建议使用原生插件(如uni-album)实现自定义相册,支持虚拟滚动和懒加载。
-
压缩策略调整:在success回调中立即执行compressImage和uploadFile可能加剧主线程阻塞。建议将压缩和上传操作放入setTimeout或Promise异步队列:
success: function (res) {
setTimeout(() => {
// 压缩和上传逻辑
}, 0)
}

