当前位置: 首页 > news >正文

Android 高通Camera2 Camera Device Close

 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博客

http://www.lryc.cn/news/59729.html

相关文章:

  • TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
  • 4、浅谈Makefile文件及其简单的使用知识
  • 5G/V2X赛道「重启」
  • pytorch进阶学习(四):使用不同分类模型进行数据训练(alexnet、resnet、vgg等)
  • Java面向对象高级【注解和反射】
  • Pytorch基础 - 4. torch.expand() 和 torch.repeat()
  • 《LeetCode》——LeetCode刷题日记
  • mysql数据库审计(1)
  • Kafka---kafka概述和kafka基础架构
  • 《JavaEE初阶》多线程基础
  • 技术分享 | OMS 初识
  • 【Elastic (ELK) Stack 实战教程】10、ELK 架构升级-引入消息队列 Redis、Kafka
  • 优先、双端队列-我的基础算法刷题之路(八)
  • Python3 os.symlink() 方法、Python 质数判断
  • P1972 [SDOI2009] HH的项链
  • ​力扣解法汇总1026. 节点与其祖先之间的最大差值
  • 010:Mapbox GL移动鼠标mousemove,显示坐标信息
  • 【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
  • 百度暑期实习 C++ 一面
  • 计算机网络第一章(概述)【湖科大教书匠】
  • 【JS】vis.js使用之vis-timeline使用攻略,vis-timeline在vue3中实现时间轴、甘特图
  • 机器学习——数据处理
  • 多种文字翻译软件-翻译常用软件
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK将相机图像数据用二进制的方式保存到本地(C++)
  • JavaScript模块的导出和导入之export和module.exports的区别
  • 基于朴素贝叶斯分类器的钞票真伪识别模型
  • 【Python】【进阶篇】二十二、Python爬虫的BS4解析库
  • UDS统一诊断服务【五】诊断仪在线0X3E服务
  • 我的创作纪念日:Unity CEO表示生成式AI将是Unity近期发展重点,发布神秘影片预告
  • 秩亏自由网平差的直接解法