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

React Native安卓调用react-native-image-picker启动相机导致应用重启如何解决

问题排查与解决方案

排查步骤

  • 检查当前项目AndroidManifest.xml中MainActivity的配置:
    • 确认是否错误配置了android:process属性,导致调起相机后主进程被系统回收
    • 确认是否缺少必要的android:configChanges配置,配置变更触发Activity重启
  • 检查设备开发者选项中是否开启了「不保留活动」开关,开启后会在离开页面时自动销毁Activity,触发重启
  • 验证是否为图片体积过大导致异常:你当前配置quality: 1会返回最高质量原图,部分设备对Intent传递的大数据上限较低,容易触发崩溃,可先把quality调整为0.5测试是否还会重启
  • 排查第三方库冲突:空项目运行正常说明是现有项目依赖导致,优先检查当前项目是否集成了其他相机/相册、权限管理、保活类的第三方库,临时注释相关库的初始化代码后重试
  • 检查Application类的初始化逻辑:是否存在进程判断错误,导致相机相关进程启动时重复执行了主进程才需要的初始化逻辑,触发崩溃

对应解决方案

  1. 修正MainActivity配置,参考示例:
<activity
  android:name=".MainActivity"
  android:launchMode="singleTask"
  android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
  android:windowSoftInputMode="adjustResize">
  1. 调整launchCamera参数,限制返回图片尺寸减少内存占用,同时增加空判断避免空指针:
try {
  launchCamera({
    quality: 0.8, // 可根据业务需求调整,不建议直接用1
    maxWidth: 1920, // 限制最大宽度
    maxHeight: 1080, // 限制最大高度
    mediaType: 'photo',
    writeTempFile: true
  }, img => {
    if(img?.assets?.length && img.assets[0]) {
      this.setState({
        img: {...img.assets[0], name: img.assets[0].fileName},
      })
    }
  });
} catch (e) {
  console.log(e);
}
  1. 解决多进程初始化冲突问题,在Application的onCreate方法最前面增加进程判断,仅在主进程执行原有初始化逻辑:
String processName = getProcessName();
if (!getPackageName().equals(processName)) {
  // 非主进程直接返回,跳过主进程初始化逻辑
  return;
}
  1. 若以上方案都无效,可尝试升级react-native-image-picker到4.x版本的最新补丁版,或者降级到4.0.0版本验证,避免特定版本的兼容bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:39:02