android camera摄像预览没有正确释放导致Method called after release()错误。
02-07 23:19:04.684: E/AndroidRuntime(23030): java.lang.RuntimeException: Method called after release()
02-07 23:19:04.684: E/AndroidRuntime(23030): at android.hardware.Camera.setHasPreviewCallback(Native Method)
02-07 23:19:04.684: E/AndroidRuntime(23030): at android.hardware.Camera.access$600(Camera.java:141)
02-07 23:19:04.684: E/AndroidRuntime(23030): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1110)
…
从堆栈中分析得出,错误的原因是由于我调用了camera.release()方法释放了摄像头,但是由于PreviewCallback忘记了反注册,所以消息循环执行到setHasPreviewCallback这个方法的时候就会抛出这个异常,也就是说这个方法不能够在摄像头释放了之后再调用,解决方法非常简单将PreviewCallback设置为空就可以了。下面是完整的释放摄像头代码。
Java
public void onPause() {
super.onPause();
//一定要设置为空
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
1
2
3
4
5
6
7
8
9
publicvoidonPause(){
super.onPause();
//一定要设置为空
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera=null;
}
copyright@黑月神话,转载请注明出处:vjson.com