Android 高通Camera2 Camera Device Close

 1. Muitas pessoas podem sentir que não há liberação razoável quando veem este log, então eles realizam a exploração do Baidu com esta ideia

2. No início, procurei o problema de ImageReader.OnImageAvailableListener

   var afterBitmap: Bitmap? = null
    /**监听拍照的图片 */
    private val imageAvailableListener =
        ImageReader.OnImageAvailableListener { reader ->
            try {
//                ThreadPoolManager.getInstance().execute {
                    // 获取捕获的照片数据
                    val image = reader.acquireNextImage()
                    val buffer = image.planes[0].buffer
                    val data = ByteArray(buffer.remaining())
                    buffer[data]
//                val bitmapByteArray = BitmapUtil.compressInSampleSize(data, 800, 480)
//                afterBitmap =
//                    BitmapFactory.decodeByteArray(bitmapByteArray, 0, bitmapByteArray.size)
                    //显示图片
                    val options =
                        BitmapFactory.Options()
                    options.inSampleSize = 2
                        val bitmap =
                            BitmapFactory.decodeByteArray(data, 0, data.size, options)
                         requireActivity().runOnUiThread(){
                             iv5.isVisible = true
                             iv5.setImageBitmap(bitmap)//  iv.setImageBitmap(adjustTakePhotoRotation(bitmap,0))
                             showButton(fail = true, pass = true)
                         }

                    image.close()//不关闭不能连拍
            } catch (e: Exception) {
            }
        }

3. Pesquise online mais tarde porque o limite máximo de disparo contínuo da Camera2 é 2. Muitos números na Internet, incluindo o código-fonte da Google Camera, precisam abrir um thread separado para processar a lógica da imagem e, em seguida, a interface do usuário será processado no thread principal. Por fim, tente uma onda de disparo contínuo no tablet e no seu próprio celular. Clicar para tirar uma foto ainda mostra o conteúdo do log de travamento java.lang.IllegalStateException: CameraDevice já foi fechado

4. Então, fiquei preso e fui para a câmera Snapdragon nativa para encontrar a resposta. Muitas pessoas lidam com a lógica do disparo contínuo no evento touch onTouch e depois veem o ciclo de vida.

5. Então, tentei modificá-lo novamente. Se não estiver totalmente liberado, verifique diretamente na mensagem de erro, adicione mais logs e veja onde o dispositivo da câmera está desligado. Por outro lado, observe o log completo , consulte Existe alguma outra anormalidade no sistema?

A análise do log mostra que após a foto ser tirada, uma prévia deve ser solicitada e o dispositivo da câmera é desligado.

Neste momento, libere todos os dispositivos de câmera e adicione registros

6. Surgiu uma surpresa no   onPause, este print já pode saber a causa da exceção anterior. Ou seja, o camera.device é liberado durante a pausa, e a visualização é solicitada no callback da foto.

 7. A solução é relatar o erro no oncapturecompled quando a foto estiver concluída e, em seguida, restaurar a visualização para ter um problema, portanto, deve ser adicionado no callback após a conclusão da foto. Se você sentir que pode haver haver problemas em outros lugares, você pode adicioná-lo, como a função de foto/pré-visualização.

 8. Em seguida, clique para tirar fotos continuamente e não há travamento por enquanto 

Outros problemas específicos da câmera2 são analisados ​​em detalhes, e o processo básico está aqui. Reimpressão por favor indique a fonte, obrigado!

Android Qualcomm Camera2 Camera Device Close_KdanMin's Blog-CSDN Blog

Acho que você gosta

Origin blog.csdn.net/qq_15950325/article/details/129696678
Recomendado
Clasificación