Android:相机调用与Activity生命周期
2015-08-01 10:13
477 查看
一个小项目,要用到相机拍照,保存拍照后,下一个界面就是扫描二维码。
参考github里面的大师的项目,分别完成了程序。经过测试,分开两个界面单独调用没问题。
可是,将两个界面连接起来,在拍照保存Activity(简称A)跳转时候,跳到第二个界面扫描二维码(简称B)时候,提示相机出错。
A中:相机初始化打开和设置参数的代码都在onCreate里面,一个类搞定。使用EasyCamera。
B中:大牛都是在onResume和onPause中开启关闭相机的。这个写法复杂一点。需要设置管理相机的类等。如:Zxing。
思考一下:单独调用A,在A按back键或者home键退出,调用系统默认相机都正常,然后再重新返回A,相机都正常运作。只是:A中的一个按钮BtnA 打开B,就出错。应该是打开B时候,A没有关闭或者释放相机资源。
测试一下生命周期:
A 的代码:
B的代码:
运行结果:
跳转到B时候A先Pause 然后B才Create。这样A的相机应该还没有完全停止,关闭,明白了。
生命周期使用不当,影响整个程序的运作。
应该参考B的写法,重新理解Activity生命周期。
参考下图:最中间的[Another activity comes in front of then activity] 这个是一个重点,简单理解为一个要被开启的activity,也就是上图运行结果的:B还没被create,先停止A.Pause,此时,A的相机没被关闭或者释放,就在B执行打开相机,程序就会出错。
参考github里面的大师的项目,分别完成了程序。经过测试,分开两个界面单独调用没问题。
可是,将两个界面连接起来,在拍照保存Activity(简称A)跳转时候,跳到第二个界面扫描二维码(简称B)时候,提示相机出错。
A中:相机初始化打开和设置参数的代码都在onCreate里面,一个类搞定。使用EasyCamera。
B中:大牛都是在onResume和onPause中开启关闭相机的。这个写法复杂一点。需要设置管理相机的类等。如:Zxing。
思考一下:单独调用A,在A按back键或者home键退出,调用系统默认相机都正常,然后再重新返回A,相机都正常运作。只是:A中的一个按钮BtnA 打开B,就出错。应该是打开B时候,A没有关闭或者释放相机资源。
测试一下生命周期:
A 的代码:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activityA); ShowMsg("A Create."); btn1 = (Button) findViewById(R.id.buttonA1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ShowMsg("BtnA1 Click And Start CycleB"); Intent intent = new Intent(ActivityA.this, ActivityB.class); startActivity(intent); ShowMsg("Start CycleB at A, And Finish A."); finish(); } }); } @Override protected void onResume() { super.onResume(); ShowMsg("A1 Resume"); } @Override protected void onPause() { super.onPause(); ShowMsg("A1 Pause"); }
B的代码:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_activity_cycle_b); ShowMsg("B Create."); btn2 = (Button) findViewById(R.id.buttonB2); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ShowMsg("BtnB2 Click Finish"); finish(); } }); } @Override protected void onResume() { super.onResume(); ShowMsg("B2 Resume"); } @Override protected void onPause() { super.onPause(); ShowMsg("B2 Pause"); }
运行结果:
跳转到B时候A先Pause 然后B才Create。这样A的相机应该还没有完全停止,关闭,明白了。
生命周期使用不当,影响整个程序的运作。
应该参考B的写法,重新理解Activity生命周期。
参考下图:最中间的[Another activity comes in front of then activity] 这个是一个重点,简单理解为一个要被开启的activity,也就是上图运行结果的:B还没被create,先停止A.Pause,此时,A的相机没被关闭或者释放,就在B执行打开相机,程序就会出错。
相关文章推荐
- jquery插件qrcode在线生成二维码
- php制作中间带自己定义图片二维码的方法
- zbar解码二维码和条形码示例
- php使用qr生成二维码的示例分享
- php实现扫描二维码根据浏览器类型访问不同下载地址
- PHP微信开发之二维码生成类
- Jquery 类网页微信二维码图块滚动效果具体实现
- 使用PHP生成二维码的方法汇总
- Perl生成纯HTML代码二维码实例
- Android开发实现模仿360二维码扫描功能实例详解
- php生成二维码的几种方式整理及使用实例
- PHP基于phpqrcode生成带LOGO图像的二维码实例
- PHP下通过QRCode类库创建中间带网站LOGO的二维码
- asp.net C#生成和解析二维码的实例代码
- ASP.NET实现二维码(QRCode)的创建和读取实例
- php生成二维码时出现中文乱码的解决方法
- Python实现的二维码生成小软件
- Python二维码生成库qrcode安装和使用示例
- iOS实现二维码的扫描功能
- 使用PHP生成二维码的方法汇总