我编写了一个带有成员变量的Activity的视频通话应用程序 私人CameraMediaSource mCameraMediaSource;
工作正常但过了一段时间有时相机不再显示了。然后我杀死整个应用程序,它再次工作。不确定如何在onPause(),onResume()等活动生命周期方法中处理相机。是否需要释放cameera?当相机暂停屏幕上的图片时,如何清除相机。感谢
答案 0 :(得分:3)
是的,相机应该被释放。最小化onDestroy但在OnPause中可能更安全。
相机使用的生命周期对我来说在1.6 - 3.x之间有效:
onResume:
- get a ref to camera with Camera.open();
- sv = (SurfaceView)this.findViewById(R.id.capture_SurfaceView);
mHolder = sv.getHolder();
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mHolder.setSizeFromLayout();
mHolder.addCallback(this);
surfaceChanged:
- Camera.setPreviewDisplayHolder()
- Camera.startPreview()
onPause:
- Camera.stopPreview
- SurfaceHolder.removeCallback()
- Camera.release()
这对我来说非常适合我在设备关闭然后重新开启,或者我的应用程序否则将进入后台。
另外,请注意未捕获的异常,否则可能会导致您无法释放相机。这通常会导致相机硬件锁定,以至于杀死并重新启动您的应用程序仍然无法打开相机。如果发生这种情况,您需要重启设备。