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

【相机开发问题总结】后台恢复到前台预览界面卡住

问题描述

页面提供了相机预览功能,该页面有可能长时间活跃在前台,也有可能偶尔被语音或者其他操作顶到后台去。
回到后台时,需要释放相机资源。
回到前台时,需要恢复相机资源和预览界面。
恢复的过程,出现界面卡顿的问题。

问题分析

onStop()时,SurfaceView或TextureView没有销毁
所以重新打开摄像头时,view的生命周期不会重新执行,也就无法刷新。

问题解决

surfaceView或TextureView通过new实例化,而不是在布局中定义。并且在onStart() 通过addview方式把view加到布局中,在onStop()时通过removeView()方式移除view。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:id="@+id/preview_parent"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- add or remove textureview on activity--></LinearLayout><!-- others view --></RelativeLayout>

动态创建view

private TextureView textureView;
private LinearLayout textureViewParent;
private Camera camera;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textureViewParent = findViewById(R.id.preview_parent);textureView = new TextureView(this);LinearLayout.LayoutParams lp = new             LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);textureView.setLayoutParams(lp);
}@Overrideprotected void onStart() {super.onStart();textureViewParent.addView(textureView);openCamera(textureView, 0);}@Overrideprotected void onStop() {super.onStop();textureViewParent.removeView(textureView);if (camera != null) {camera.stopPreview();camera.setPreviewCallback(null);camera.release();}}private void openCamera(final TextureView textureView, final int cameraId) {if (textureView == null || cameraId < 0) {return;}textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {@Overridepublic void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {try {camera = Camera.open(cameraId);camera.setPreviewTexture(surfaceTexture);camera.startPreview();} catch (IOException localIOException) {Log.e(TAG, "onSurfaceTextureAvailable open camera localIOException cameraId=" + cameraId + ", error=" + localIOException.getMessage(), localIOException);} catch (Exception e) {Log.e(TAG, "onSurfaceTextureAvailable open camera cameraId=" + cameraId + ", error=" + e.getMessage(), e);}}@Overridepublic void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) {}@Overridepublic boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {return false;}@Overridepublic void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {}});}

相关文章:

  • 【14】bat脚本备份mysql数据
  • 重大活动网络安全保障建设及运营指南
  • C++开源库glog使用封装--自定义日志输出格式,设置日志保留时间
  • nginx 配置stream模块代理并开启日志配置
  • id3算法【python,算法,机器学习】
  • 星型模型和雪花模型的区别
  • 面试经历-凉经
  • 基于Matlab实现声纹识别系统
  • Ubuntu Nerfstudio安装
  • Day37 贪心算法part04
  • K-means聚类模型教程(个人总结版)
  • web开发中的四种会话跟踪技术
  • 一阶数字高通滤波器
  • ASTGCN 论文学习上
  • C-数据结构-双向链表(linux内核 )
  • .pyc 想到的一些问题
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ES10 特性的完整指南
  • express如何解决request entity too large问题
  • Flannel解读
  • JAVA多线程机制解析-volatilesynchronized
  • Shell编程
  • Yii源码解读-服务定位器(Service Locator)
  • 翻译:Hystrix - How To Use
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 回顾2016
  • 聚簇索引和非聚簇索引
  • 普通函数和构造函数的区别
  • 事件委托的小应用
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 想写好前端,先练好内功
  • 译米田引理
  • 进程与线程(三)——进程/线程间通信
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • (09)Hive——CTE 公共表达式
  • (1) caustics\
  • (pojstep1.3.1)1017(构造法模拟)
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四) 虚拟摄像头vivi体验
  • (一)u-boot-nand.bin的下载
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)大道至简,职场上做人做事做管理
  • .NET BackgroundWorker
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core 通过 Ef Core 操作 Mysql
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net mvc部分视图
  • .NET 中 GetProcess 相关方法的性能
  • .Net6 Api Swagger配置
  • .net开发引用程序集提示没有强名称的解决办法
  • @DataRedisTest测试redis从未如此丝滑
  • @property @synthesize @dynamic 及相关属性作用探究