android - 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)
异常主要发生在启动活动或关闭活动期间。知道为什么会发生吗?
解决方案
我通过使用更新版本的 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
推荐阅读
- android - 回收站视图中的 ImageView 尺寸错误 CardView
- angular - 从下拉列表中删除最新项目
- zsh - 在脚本中使用 zsh 的 vared 进行行编辑
- python - mayavi 中与圆锥相交的线
- java - AtomicInteger类中getAndIncrement方法中的spin是什么意思?
- django - 缓存 - Django 休息框架
- java - 使用方法修改 log4j 配置文件和初始化 logger 对象之间的冲突
- javascript - 使用 jQuery 和 Javascript 将带有用户输入内容的函数数组返回到 UI
- logistic-regression - 有没有办法追踪符合这些数据的曲线?
- javascript - 在 JavaScript 中按类别对值进行排序的最佳方法是什么