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

【相机开发问题总结】锁屏下相机资源释放问题

问题描述

系统锁屏时间设置了15秒,有一个页面是人脸识别页面,会开启相机展示相机预览内容,并分析人脸结果,自动跳转到下一个页面。

问题出现在跳转页面之前,可能触发了锁屏,会导致息屏,息屏呢,同时会释放相机资源,释放人脸识别sdk,以便于两瓶再次恢复页面的时候,重新申请相机资源,而此时会出现app crash

问题分析

在自定义相机页面按HOME键时的执行流程:

程序运行->按HOME键;
Activity调用的顺序是onPause->onStop;
SurfaceView调用了surfaceDestroyed方法;。

然后再切回程序:
Activity调用的顺序是onRestart->onStart->onResume;
SurfaceView调用了surfaceCreated->surfaceChanged方法。

而对于锁屏,其执行流程则是:
Activity只调用onPause方法 ;
解锁后Activity调用onResume方法;
由此可见,问题所在是SurfaceView中surfaceholder.callback的所有方法都没有执行。
由于锁屏时,callback的回调方法没有执行,导致相机和预览的连接还没有断开,相机资源就被释放了,所以导致在重新申请相机资源时,系统报crash。根据上面的文档,推测是锁屏下系统并没有改变surfaceview的可见性,于是我尝试在onPause和onResume时通过手动设置surfaceview的visibile属性,结果发现可以正常触发回调函数了。由于在切后台或者锁屏时,用户本来就应该看不到surfaceview,因此这种手动更改surfaceview的可见性的方法,并不会对用户的体验造成影响。

问题解决

设置可见性,强制进入SurfaceView中surfaceholder.callback回调。

   @Overrideprotected void onResume() {super.onResume();if(previewView != null){previewView.setVisibility(View.VISIBLE);}}@Overrideprotected void onPause() {super.onPause();if(previewView != null){previewView.setVisibility(View.INVISIBLE);}}

相关文章:

  • 常见的100个Shell命令,超级实用!
  • mars3d的V2版本的Video2D与V3版本的Video2D实现数据快速迁移
  • Springboot阶段项目---《书城项目》
  • 大厂程序员离职,开发一个盲盒小程序2万,一周开发完!
  • centos 安装mysql8 客户端
  • SpringBoot集成腾讯云敏感词校验API流程
  • vlan综合实验
  • 运维笔记.MySQL.基于mysqldump数据备份与恢复
  • 【Linux】- HBase集群部署 [19]
  • Ubuntu 22.04 docker方式启动artifactory相关
  • linux替换文件中的字符串
  • C语言 | Leetcode C语言题解之第108题将有序数组转换为二叉搜索树
  • 网上的面经【面试准备】
  • Docker打包nginx镜像丢失挂载的配置文件
  • Vue3实现上传照片以及回显
  • ----------
  • Angular 响应式表单之下拉框
  • js作用域和this的理解
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Node + FFmpeg 实现Canvas动画导出视频
  • python学习笔记 - ThreadLocal
  • React系列之 Redux 架构模式
  • Shell编程
  • spring cloud gateway 源码解析(4)跨域问题处理
  • vue自定义指令实现v-tap插件
  • 复习Javascript专题(四):js中的深浅拷贝
  • 猴子数据域名防封接口降低小说被封的风险
  • 事件委托的小应用
  • 学习笔记TF060:图像语音结合,看图说话
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • ​ArcGIS Pro 如何批量删除字段
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (js)循环条件满足时终止循环
  • (windows2012共享文件夹和防火墙设置
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (南京观海微电子)——I3C协议介绍
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • *上位机的定义
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .gitignore文件_Git:.gitignore
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 事件模型教程(二)
  • .Net中ListT 泛型转成DataTable、DataSet
  • /proc/vmstat 详解