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设置为空就可以了。下面是完整的释放摄像头代码。
1 2 3 4 5 6 7 8 9 |
public void onPause() { super.onPause(); //一定要设置为空 mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); mCamera = null; } |