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()
中,我在 SurfaceView (564) 处收到强制关闭(
。我知道这个错误是因为我释放了相机及其表面 View 。根据android的文档,空指针异常
) onsurfaceChanged()
在surfaceCreated();
之后至少被调用一次
所以我的查询是我在控件脱离onsurfaceChanged()
之前释放相机对象及其预览支架是错误的吗?我的要求是我检查某些情况,如果创建预览后条件为假,则释放相机,即 startPreview();
在 onsurfaceChanged()
本身内部提前执行一些任务。
有什么方法可以检测到 onsurfaceChanged()
被调用一次,然后我可以触发 Myfunction();
最佳答案
简单的解决方法是使用 CameraPreview.post()
在回调返回后释放相机:
public class CameraPreview … {
void Myfunction() {
…
this.post(new Runnable() {
public void run() {
mCamera.release();
mCamera = null;
}
}
…
}
}
关于android - 在 surfaceChanged 中释放相机对象会导致强制关闭(空指针异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21720347/