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