取消与生命周期的绑定

问题遇到的现象和发生背景

img

遇到的现象和发生背景,请写出第一个错误信息

相机预览 怎么样才能取消与生命周期的绑定

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
    private fun startCamera(mContext: Context, lifecycle: LifecycleOwner, view: PreviewView) {
        val cameraProviderFuture = ProcessCameraProvider.getInstance(mContext)
        cameraProviderFuture.addListener({
            cameraProvider = cameraProviderFuture.get()
            preview = Preview.Builder().build()
            changePreView(CameraSelector.LENS_FACING_FRONT,lifecycle,view)
        }, ContextCompat.getMainExecutor(mContext))
    }

    private fun changePreView(lensFacing: Int, lifecycle: LifecycleOwner, view: PreviewView) {
        cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build()
        try {
            cameraProvider?.unbindAll()
            camera = cameraProvider?.bindToLifecycle(lifecycle, cameraSelector!!, preview)

            preview?.setSurfaceProvider(view.createSurfaceProvider(camera?.cameraInfo))
        } catch (exc: Exception) {
            Log.e("TAG", "Use case binding failed", exc)
        }
    }

运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

img

img

重写LifecycleOwner 自己控制生命周期的调用就行

可以将changePreView函数修改如下:

private fun changePreView(lensFacing: Int, view: PreviewView) {
    cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build()
    try {
        cameraProvider?.unbindAll()
        camera = cameraProvider?.bindToLifecycle(LifecycleOwner {}, cameraSelector!!, preview)

        preview?.setSurfaceProvider(view.createSurfaceProvider(camera?.cameraInfo))
    } catch (exc: Exception) {
        Log.e("TAG", "Use case binding failed", exc)
    }
}

望采纳。