React Native实时预览中的CameraX问题
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。