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

React Native嵌入Android原生CameraX预览遇超时异常(iOS正常)

在React Native中嵌入CameraX实时预览Android原生视图时的超时异常问题

我尝试在React Native视图中嵌入带CameraX实时预览的Android原生视图,iOS端运行正常,但Android端出现CameraX超时异常。

错误日志

2026-04-13 06:52:21.140 20921-20921 QR_DEBUG                com.adb_lite                         E  CameraXView初始化完成
2026-04-13 06:52:21.167 20921-20921 QR_DEBUG                com.adb_lite                         E  onAttachedToWindow
2026-04-13 06:52:21.582 20921-20921 QR_DEBUG                com.adb_lite                         E  startCamera被调用 attached=true bound=false starting=false
2026-04-13 06:52:21.645 20921-20921 QR_DEBUG                com.adb_lite                         E  Camera已绑定,仅启用预览
2026-04-13 06:52:21.667 20921-20934 CameraManagerGlobal     com.adb_lite                         E  相机4不存在,忽略物理相机状态变化
2026-04-13 06:52:26.723 20921-21287 Camera2CameraImpl       com.adb_lite                         E  无法配置相机Camera@8ca9ca1[id=0] 
java.util.concurrent.TimeoutException: Future[androidx.camera.core.impl.utils.futures.ListFuture@a88d3d8] 未在5000毫秒内完成。
	at androidx.camera.core.impl.utils.futures.Futures.lambda$makeTimeoutFuture$1(Futures.java:427)
	at androidx.camera.core.impl.utils.futures.FuturesExternalSyntheticLambda7.call(D8ExternalSyntheticLambda7.call(D8SyntheticClass:0)
	at androidx.camera.core.impl.utils.executor.HandlerScheduledExecutorService$HandlerScheduledFuture.run(HandlerScheduledExecutorService.java:240)
	at android.os.Handler.handleCallback(Handler.java:1027)
	at android.os.Handler.dispatchMessage(Handler.java:108)
	at android.os.Looper.loopOnce(Looper.java:298)
	at android.os.Looper.loop(Looper.java:408)
	at android.os.HandlerThread.run(HandlerThread.java:85)
2026-04-13 06:52:27.996 20921-20921 QR_DEBUG                com.adb_lite                         E  onDetachedFromWindow
2026-04-13 06:52:27.996 20921-20921 QR_DEBUG                com.adb_lite                         E  stopCamera被调用
2026-04-13 06:52:28.021 20921-20921 QR_DEBUG                com.adb_lite                         E  onAttachedToWindow
2026-04-13 06:52:28.045 20921-20921 QR_DEBUG                com.adb_lite                         E  Camera已解绑
2026-04-13 06:52:28.114 20921-20938 CameraManagerGlobal     com.adb_lite                         E  相机4不存在,忽略物理相机状态变化
2026-04-13 06:52:34.275 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: 相机为null
2026-04-13 06:52:36.417 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: 相机为null
2026-04-13 06:52:36.683 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: 相机为null
2026-04-13 06:52:36.933 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: 相机为null
2026-04-13 06:52:37.099 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: 相机为null

排查与解决步骤

  • 修正视图生命周期与相机初始化时机
    日志显示相机初始化后快速触发挂载/卸载切换,说明React Native视图状态不稳定。确保startCamera仅在视图完全挂载且状态稳定后调用,避免重复触发相机初始化流程。

  • 延长CameraX配置超时时间
    针对部分设备相机配置耗时较长的情况,自定义CameraX配置调整超时参数:

    val config = CameraXConfig.Builder.fromConfig(CameraX.getDefaultConfig())
        .setCameraOpenTimeoutMs(10000) // 将超时时间延长至10秒
        .build()
    CameraX.initialize(context, config)
    
  • 指定具体相机设备
    日志中出现“相机4不存在”的警告,需在相机选择时明确指定后置/前置相机,避免自动选择无效设备:

    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
    
  • 确认相机权限状态
    确保Android端已动态申请CAMERA权限,且在权限授予成功后再初始化CameraX,避免权限未就绪时触发相机配置。

  • 优化线程调度
    CameraX的初始化与配置操作应放在后台线程执行,避免阻塞主线程导致超时。可通过Executors.newSingleThreadExecutor()指定相机执行器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 14:22:27