首页 > 解决方案 > CameraX 随机崩溃并出现 IllegalStateException

问题描述

我在我的应用程序中使用 CameraX API。我已将 Preview UseCase 和 ImageAnalysis UseCase 绑定到 Activity 生命周期,例如

preview.previewSurfaceProvider = frontFacingCameraPreviewSurface.previewSurfaceProvider
imageAnalysis.setAnalyzer(mainExecutor, myAnalyzer)
cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview, imageAnalysis)

该应用程序大部分时间都可以运行,但会随机崩溃并出现以下日志

2020-01-17 11:24:47.411 6581-6614/com.my.app D/Camera:重置捕获会话

2020-01-17 11:24:47.411 6581-6614/com.my.app D/Camera:在 CLOSING 状态下发布会话

2020-01-17 11:24:47.413 6581-6955/com.my.app D/Surface: setPackageUsesOwnResolution() (native) for "n0x8d8e9000" (SurfaceTexture-0-6581-22): false

2020-01-17 11:24:47.477 6581-6594/com.my.app I/CameraManagerGlobal:postSingleUpdate 设备:相机 ID 1 状态 STATUS_PRESENT

2020-01-17 11:24:47.478 6581-6594/com.my.app I/CameraManagerGlobal:postSingleUpdate 设备:相机 ID 1 状态 STATUS_PRESENT

2020-01-17 11:24:47.480 6581-6614/com.my.app D/Camera:在 CLOSING 状态下发布会话

2020-01-17 11:24:47.480 6581-6614/com.my.app D/Camera: CameraDevice.onClosed(): 1

2020-01-17 11:24:47.486 6581-6614/com.my.app E/AndroidRuntime: 致命例外: CameraX-

Process: com.my.app, PID: 6581
java.lang.IllegalStateException
    at androidx.core.util.Preconditions.checkState(Preconditions.java:96)
    at androidx.core.util.Preconditions.checkState(Preconditions.java:108)
    at androidx.camera.camera2.internal.Camera2CameraImpl$StateCallback.onClosed(Camera2CameraImpl.java:1298)
    at androidx.camera.camera2.internal.CameraDeviceStateCallbacks$ComboDeviceStateCallback.onClosed(CameraDeviceStateCallbacks.java:105)
    at android.hardware.camera2.impl.CameraDeviceImpl$5.run(CameraDeviceImpl.java:212)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:214)
    at android.os.HandlerThread.run(HandlerThread.java:65)

异常主要发生在启动活动或关闭活动期间。知道为什么会发生吗?

标签: androidcameraandroidxandroid-camerax

解决方案


我通过使用更新版本的 camerax 库和预览以某种方式解决了我的问题:

    def camerax_version = "1.0.0-beta03"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    // If you want to use the CameraX View class
    implementation "androidx.camera:camera-view:1.0.0-alpha10"
    // If you want to use the CameraX Extensions library
    implementation "androidx.camera:camera-extensions:1.0.0-alpha10"
    // If you want to use the CameraX Lifecycle library
    implementation "androidx.camera:camera-lifecycle:${camerax_version}"

有关更多信息,请访问此链接: https ://issuetracker.google.com/issues/154070419


推荐阅读