You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo Camera takePictureAsync()在Android端调用缓慢问题排查

Android端expo-camera takePictureAsync执行卡顿问题排查

问题背景

我正在开发一款支持用户上传图片或直接拍照的图片应用。iOS端运行正常,但Android端使用expo-camera的takePictureAsync函数时耗时极长,导致应用卡顿。当前使用的技术栈是Expo SDK 47和expo-camera@~12.5.0版本。

相关代码如下:

const camera = useRef();

const takePicture = async () => {
  const image = await camera.current?.takePictureAsync({
    quality: 0.1,
    skipProcessing: true,
    base64: true
  });
};

我曾怀疑是base64属性导致Android端变慢,但移除该属性后问题依旧,请问可能的原因是什么?

可能的原因及排查方向

  • 设备硬件性能差异:Android设备的相机硬件层级跨度大,中低端机型的图像处理器或传感器性能有限,即使降低质量参数,原始图像数据的捕获和基础处理仍会占用大量系统资源,导致耗时增加。
  • 版本适配的性能瓶颈:Expo SDK 47对应的expo-camera@~12.5.0在Android平台存在未优化的底层适配问题,比如图像捕获后的线程调度不合理,导致主线程被阻塞,出现卡顿。
  • skipProcessing参数的平台差异:该参数在iOS和Android上的实现逻辑不一致,Android端即使设置skipProcessing: true,仍会执行一些图像格式转换、元数据写入等必要操作,无法完全跳过处理流程。
  • 系统资源抢占:如果Android系统后台有高占用的进程(如视频播放、大型游戏),或者应用未获取相机的高优先级权限,会导致相机拍照时无法分配足够的CPU/GPU资源,拖慢执行速度。
  • 硬件加速未启用:部分Android设备默认未给应用开启相机相关的硬件加速,此时图像处理会依赖软件模拟,大幅增加takePictureAsync的执行耗时。

内容的提问来源于stack exchange,提问作者blouuuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:00:07