public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
..........
.......
public void surfaceCreated(SurfaceHolder holder) {
........
..........
// I create camera object with camera.open
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// I start camera preview successfully and call my function.
Myfunction();
//this function does some checking (a separate thread ) n releases camera object immediately and also release the camera preview
}
}
现在,当控件离开此功能时,我仍然在onsurfaceChanged()
,我在Null Pointer exception
处获得了一个强制关闭(SurfaceView (564)
)。我知道这个错误是因为我发布了相机及其表面视图。根据android的文档,在onsurfaceChanged()
surfaceCreated();
被称为至少一次
所以我的查询错误是我在控件退出onsurfaceChanged()
之前释放了相机对象及其预览版本?我的要求是我检查一些情况如果创建预览时,如果条件为假,则释放相机,即startPreview();
在onsurfaceChanged()
内部执行某项任务。
有什么方法可以检测到onsurfaceChanged()
被调用一次然后我可以触发Myfunction();
答案 0 :(得分:2)
简单的解决方法是在回调后使用CameraPreview.post()
释放相机:
public class CameraPreview … {
void Myfunction() {
…
this.post(new Runnable() {
public void run() {
mCamera.release();
mCamera = null;
}
}
…
}
}