uni-app 在有地图的情况下选择图片上传组件上传图片会导致APP崩溃
uni-app 在有地图的情况下选择图片上传组件上传图片会导致APP崩溃
示例代码:
直接运行管理员可见的附件工程。
操作步骤:
打开,登录,选择定位,选择系统更换,单击新建,划到最下面,单击图片上传组件,上传图片,选择相册。
预期结果:
正常浏览图片
实际结果:
崩溃
bug描述:
在有地图的情况下,使用上传组件上传图片,打开图片选择器后,直接崩溃。 Android Studio的Logcat提示:
Process: io.dcloud.HBuilder, PID: 19094
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1046256 bytes
at android.app.ActivityClient.activityStopped(ActivityClient.java:86)
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:143)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8292)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
Caused by: android.os.TransactionTooLargeException: data parcel size 1046256 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:624)
at android.app.IActivityClientController$Stub$Proxy.activityStopped(IActivityClientController.java:1297)
at android.app.ActivityClient.activityStopped(ActivityClient.java:83)
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:143)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8292)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
使用官方基座一样有问题。
更多关于uni-app 在有地图的情况下选择图片上传组件上传图片会导致APP崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发人员帮忙看看。
更多关于uni-app 在有地图的情况下选择图片上传组件上传图片会导致APP崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用 uni-app 开发应用时,如果在地图组件(如 map
组件)和图片上传组件(如 uni.chooseImage
)同时存在的情况下,可能会导致应用崩溃。这种情况通常与内存管理、资源占用或原生模块冲突有关。以下是一些可能的原因和解决方案:
可能的原因
-
内存占用过高
地图组件和图片上传组件同时使用时,可能会占用大量内存,尤其是在处理高分辨率图片时,导致应用崩溃。 -
原生模块冲突
地图组件和图片上传组件可能依赖不同的原生模块,这些模块在同时使用时可能会产生冲突。 -
渲染性能问题
地图组件和图片上传组件可能同时进行复杂的渲染操作,导致主线程阻塞或 GPU 资源不足。 -
平台兼容性问题
不同平台(如 iOS 和 Android)对内存管理和资源调用的方式不同,可能导致在某些平台上出现崩溃。
解决方案
-
优化内存使用
- 在调用
uni.chooseImage
时,限制图片的尺寸和质量。例如:uni.chooseImage({ count: 1, sizeType: ['compressed'], // 压缩图片 sourceType: ['album', 'camera'], success: (res) => { console.log('图片路径:', res.tempFilePaths[0]); } });
- 避免同时加载过多高分辨率图片。
- 在调用
-
延迟加载或分步操作
- 在地图和图片上传功能之间加入延迟,避免同时操作。例如,先加载地图,再触发图片上传。
- 使用
setTimeout
或Promise
进行分步处理。
-
检查原生模块兼容性
- 确保使用的第三方插件或原生模块兼容 uni-app 的版本。
- 如果使用了自定义原生模块,检查是否存在冲突。
-
降低地图组件的渲染压力
- 减少地图上的标记点(markers)或覆盖物(overlays)。
- 使用
map
组件的show-location
属性时,避免频繁更新位置。
-
使用条件渲染
- 在需要上传图片时,隐藏地图组件;在上传完成后,再重新显示地图组件。例如:
<template> <view> <map v-if="!isUploading" style="width: 100%; height: 300px;"></map> <button @click="chooseImage">上传图片</button> </view> </template> <script> export default { data() { return { isUploading: false, }; }, methods: { chooseImage() { this.isUploading = true; uni.chooseImage({ count: 1, success: (res) => { console.log('图片路径:', res.tempFilePaths[0]); this.isUploading = false; }, fail: () => { this.isUploading = false; } }); } } }; </script>
- 在需要上传图片时,隐藏地图组件;在上传完成后,再重新显示地图组件。例如: