React Native实时预览中的CameraX问题

移动开发 2026-07-10

I am currently trying to embed an Android native view inside a React Native view with a CameraX live preview. However, I am facing a timeout exception issue with CameraX.

On iOS, the same implementation is working fine.

2026-04-13 06:52:21.140 20921-20921 QR_DEBUG                com.adb_lite                         E  CameraXView init done 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 called attached=true bound=false starting=false 2026-04-13 06:52:21.645 20921-20921 QR_DEBUG                com.adb_lite                         E  Camera bound with Preview ONLY 2026-04-13 06:52:21.667 20921-20934 CameraManagerGlobal     com.adb_lite                         E  Camera 4 is not present. Ignore physical camera status change 2026-04-13 06:52:26.723 20921-21287 Camera2CameraImpl       com.adb_lite                         E  Unable to configure camera Camera@8ca9ca1\[id=0\] java.util.concurrent.TimeoutException: Future\[androidx.camera.core.impl.utils.futures.ListFuture@a88d3d8\] is not done within 5000 ms. at androidx.camera.core.impl.utils.futures.Futures.lambda$makeTimeoutFuture$1(Futures.java:427) at androidx.camera.core.impl.utils.futures.Futures

ExternalSyntheticLambda7.call(D8ExternalSyntheticLambda7.call(D8

 SyntheticClass: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 called 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 unbound 2026-04-13 06:52:28.114 20921-20938 CameraManagerGlobal     com.adb_lite                         E  Camera 4 is not present. Ignore physical camera status change 2026-04-13 06:52:34.275 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: camera is null 2026-04-13 06:52:36.417 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: camera is null 2026-04-13 06:52:36.683 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: camera is null 2026-04-13 06:52:36.933 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: camera is null 2026-04-13 06:52:37.099 20921-20921 QR_DEBUG                com.adb_lite                         E  toggleFlash: camera is null

解决方案

在React Native中,当你嵌入一个Android本地视图时,该视图可能会被快速地多次挂载/卸载。

布局阶段或状态更新可能会触发:

  • onAttachedToWindow
  • 然后紧接着onDetachedFromWindow

CameraX需要一个稳定的生命周期(1-2秒)来绑定用例,但你的视图在初始化过程中被销毁,导致超时异常(TimeoutException)。

你可以通过以下方式来延迟相机启动以修复这个问题:

Handler(Looper.getMainLooper()).postDelayed({
    startcameraSafely()
}, 300)

并防止重复的启动/停止调用。

private isStarting = false

fun startCameraSafely() {
    if (!isStarting || camera != null) return

    isStarting = true
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章