网站建设的目的和目标,电商到底是什么,工程项目,东莞市交易中心网1、很多人看到这个日志第一感觉可能觉得哪里没有合理释放#xff0c;于是带着这个思路去进行百度探索
2、一开始我去寻找 ImageReader.OnImageAvailableListener 这个问题 var afterBitmap: Bitmap? null/**监听拍照的图片 */private val imageAvailableListener ImageRead… 1、很多人看到这个日志第一感觉可能觉得哪里没有合理释放于是带着这个思路去进行百度探索
2、一开始我去寻找 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].bufferval 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 2val bitmap BitmapFactory.decodeByteArray(data, 0, data.size, options)requireActivity().runOnUiThread(){iv5.isVisible trueiv5.setImageBitmap(bitmap)// iv.setImageBitmap(adjustTakePhotoRotation(bitmap,0))showButton(fail true, pass true)}image.close()//不关闭不能连拍} catch (e: Exception) {}}
3、后面网上去寻找因为 Camera2最大连拍限制是2 网上很多数包括Google相机源码 需要单独开个线程去处理图片的逻辑 然后ui在主线程去处理最后尝试一波在平板以及自己手机连续点击拍照还是出现crash 日志内容java.lang.IllegalStateException: CameraDevice was already closed
4、我于是陷入困境 然后去原生骁龙相机去找答案 很多人都是在触摸onTouch事件里面去处理连拍的逻辑 然后看到生命周期。
5、于是又尝试修改 是不是哪里没有完全释放掉那 就直接从报错信息上排查吧加多点日志看下哪个地方有把camera device关掉没 另一方面就是看下完整日志看下有系统这块有没其它异常
分析日志是在拍照完成后这时应该是请求预览然后发现camera device关闭了
这时候把所有cameradevice释放地方加上日志
6、惊喜出现了 onPause里面 这个打印已经可以知道前面异常的原因了。就是onpause的时候释放了camera.device,拍照回调里面又去请求了预览。 7、解决方案在 报错是在拍照完成的oncapturecompled里面然后去恢复预览出问题的所以应该在拍照完成的回调里面加 要是觉的其它地方也可能有问题就都加下 比如拍照/预览功能 8、然后再连续点击拍照暂时没有出现crash
其他camera2具体问题 具体分析到这里基本流程结束了。转载请注明出处谢谢
Android 高通Camera2 Camera Device Close_KdanMin的博客-CSDN博客