uni-app 拍照功能闪退问题

uni-app 拍照功能闪退问题

开发环境 版本号 项目创建方式
Windows HBuilderX

操作步骤:

  • 在特定机型拍照闪退,错误日志搜索后怀疑 bitmap 造成内存泄漏

预期结果:

  • 偶发闪退,有时可以拍照上传

实际结果:

  • 尽快修复问题,项目中正在使用

bug描述:

拍照闪退
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap[@c16e7c6](/user/c16e7c6)
at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:55)
at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:230)
at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:97)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:529)
at android.widget.ImageView.onDraw(ImageView.java:1378)
at android.view.View.draw(View.java:19453)
at android.view.View.updateDisplayListIfDirty(View.java:18403)
at android.view.View.draw(View.java:19181)
...

更多关于uni-app 拍照功能闪退问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 拍照功能闪退问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的Bitmap内存回收导致的Canvas绘制异常问题。在uni-app中,当使用相机功能时,系统会频繁创建和回收Bitmap对象,如果回收时机不当就会出现这种错误。

主要原因是:在Android系统中,当Bitmap被回收(recycled)后,如果UI线程仍尝试在Canvas上绘制该Bitmap,就会抛出这个RuntimeException。

解决方案:

  1. 检查图片加载流程:确保在调用uni.chooseImage或相机API后,对返回的图片路径进行有效性验证,避免使用已回收的Bitmap。

  2. 优化内存管理:在页面onUnload或组件销毁时,手动释放Bitmap资源:

onUnload() {
    // 清空图片引用,帮助GC回收
    this.imageSrc = null
}
  1. 图片压缩处理:使用uni.compressImage对拍摄的图片进行压缩,减少内存占用:
uni.compressImage({
    src: tempFilePath,
    quality: 80,
    success: res => {
        this.uploadImage(res.tempFilePath)
    }
})
回到顶部