停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法...

如下代码:
private void stopPreview() {
		Log.w(TAG, "stopPreview(), _isPreviewing = " + _isPreviewing + ", _mCamera = " + _mCamera);

		if (_isPreviewing && _mCamera != null) {
			_mCamera.stopPreview();

			/**
			 * Note: 一定要调用 _mCamera.setPreviewCallback(null), 否则出现 Method called
			 * after release() 异常.
			 */
			_mCamera.setPreviewCallback(null);
			_mCamera.release();
			_mCamera = null;

			_isPreviewing = false;
			updateTimeRemainingInfoVisibility();
			updateMotionDetectScoreVisibility();

			releaseVideoDetector();
		}

	}

在停止预览时,调用自定义stopPreview(),在执行到_mCamera.release()后,出现Method called after release()异常。

1. 具体原因

是因为在之前调用_mCamera.startPreview()方法之前,调用了_mCamera.setPreviewCallback(xxActivity.this),导致在手动调用上面stopPreview()的时候,xxActivity.this 实现的PreviewCallback接口onPreviewFrame方法还在不停调用,具体调用频率就是当前预览的FrameRate,当stopPreview()执行完_mCamera.release()时,onPreviewFrame再次被调用时就出现了该异常。

2. 解决办法

在自定义的stopPreview()里面调用_mCamera.release()之前,先调用一次_mCamera.setPreviewCallback(null); ,这样在执行完_mCamera.release(),因为指定的PreviewCallback为null,因而就不会再调用onPreviewFrame,进而也不会再引用到camera和调用到其任何方法。注:onPreviewFrame第二个参数引用了camera。



转载于:https://www.cnblogs.com/sesexxoo/p/6189929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值