Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何解决CameraX闪烁屏幕错误_Android_Kotlin_Android Camerax - Fatal编程技术网

Android 如何解决CameraX闪烁屏幕错误

Android 如何解决CameraX闪烁屏幕错误,android,kotlin,android-camerax,Android,Kotlin,Android Camerax,在版本1.0.0-beta03 CameraX之前,我使用的是版本1.0.0-alpha06,图像分析和条形码扫描对我来说效果很好。现在,在新版本上,它并不总是有效,因为相机预览有时会闪烁,图像最终变得不够清晰,无法检测条形码 看看我附上的图片。屏幕故意是黑色的,以便能够看到差异。 我认为问题在于照相机占用了太多的内存。我注意到,如果我清除后台运行的应用程序并重新启动该应用程序,相机质量会更好,不会出现屏幕闪烁的情况。当我这么做的时候,有一次它说“释放了200mb内存”,仅仅是从我的应用程序中

在版本1.0.0-beta03 CameraX之前,我使用的是版本1.0.0-alpha06,图像分析和条形码扫描对我来说效果很好。现在,在新版本上,它并不总是有效,因为相机预览有时会闪烁,图像最终变得不够清晰,无法检测条形码

看看我附上的图片。屏幕故意是黑色的,以便能够看到差异。

我认为问题在于照相机占用了太多的内存。我注意到,如果我清除后台运行的应用程序并重新启动该应用程序,相机质量会更好,不会出现屏幕闪烁的情况。当我这么做的时候,有一次它说“释放了200mb内存”,仅仅是从我的应用程序中。我不能一直复制闪烁的bug,但我要做的是关闭应用程序,重新启动,最后它开始闪烁。在我的条形码扫描片段中,这是我的onDestroy

override fun onDestroy() {
    super.onDestroy()
    // I call cameraUtil.unbindCamera() which executes code below:
    cameraProvider?.unbindAll()
    cameraExecutor?.shutdown()
}
这是我的摄像机直到(用于初始化不同片段的摄像机)设置摄像机功能:

fun setupCameraX(previewView: PreviewView,fragment:Fragment, analyzer:ImageAnalysis.Analyzer?) {
        previewView.preferredImplementationMode = PreviewView.ImplementationMode.TEXTURE_VIEW
        val cameraProviderFuture = ProcessCameraProvider.getInstance(fragment.context!!)
        val rotation = previewView.display.rotation
        cameraExecutor = Executors.newSingleThreadExecutor()

        cameraProviderFuture.addListener(Runnable {
            cameraProvider = cameraProviderFuture.get()
            val cameraSelector = CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
            val preview = Preview.Builder().setTargetRotation(rotation).build()
            preview.setSurfaceProvider(previewView.createSurfaceProvider(null))

            var useCase:UseCase?=null
            if(analyzer==null){
                imageCapture = ImageCapture.Builder()
                        .setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
                        .setTargetRotation(previewView.display.rotation)
                        .build()
                useCase = imageCapture!!
            }else{
                val imageAnalysis = ImageAnalysis.Builder()
                        .setTargetRotation(rotation)
                        .build()
                        .also{
                            it.setAnalyzer(cameraExecutor!!, analyzer)
                        }
                useCase = imageAnalysis
            }


            cameraProvider?.unbindAll()

            try{
                camera = cameraProvider?.bindToLifecycle(fragment, cameraSelector, preview,useCase)
                preview.setSurfaceProvider(previewView.createSurfaceProvider(camera?.cameraInfo))
            }catch(ex: Exception){
                Log.e("error",ex.message,ex)
            }
        }, ContextCompat.getMainExecutor(fragment.context))
    }
我一定要打电话

cameraProvider?.unbindAll()

这样以前的camerax用例就没有绑定了


编辑:设备华为p smart 2019

切换到camerax版本1.0.0-beta05解决了问题切换到camerax版本1.0.0-beta05解决了问题