0

API 15. 当我在拍照后停止相机并转到主屏幕并重新打开我的应用程序并尝试拍摄另一张照片时,我的应用程序崩溃并出现此错误:

04-20 12:04:38.437: E/AndroidRuntime(5150): FATAL EXCEPTION: Timer-2
04-20 12:04:38.437: E/AndroidRuntime(5150): java.lang.RuntimeException: Method called after release()
04-20 12:04:38.437: E/AndroidRuntime(5150):     at android.hardware.Camera.native_takePicture(Native Method)
04-20 12:04:38.437: E/AndroidRuntime(5150):     at android.hardware.Camera.takePicture(Camera.java:947)
04-20 12:04:38.437: E/AndroidRuntime(5150):     at android.hardware.Camera.takePicture(Camera.java:892)
04-20 12:04:38.437: E/AndroidRuntime(5150):     at com.prism.app.PrismActivity$5.run(PrismActivity.java:167)
04-20 12:04:38.437: E/AndroidRuntime(5150):     at java.util.Timer$TimerImpl.run(Timer.java:284)


public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, now tell the camera where to draw the preview.
    if (mCamera == null) {
        try {
            mCamera = Camera.open();
            mCamera.setPreviewDisplay(holder);
            mCamera.setDisplayOrientation(90);
            mCamera.startPreview();
        } catch (IOException e) {
            // error setting preview of camera
        }
    } else {
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    // empty. Take care of releasing the Camera preview in your activity.
    if (mCamera != null) {
        mCamera.setPreviewCallback(null);
        mCamera.stopPreview();
        mCamera.release(); //need to take care of case when app is not closed completely still need to release
        mCamera = null;
    }
}
4

2 回答 2

0

从堆栈跟踪来看,您似乎还有一些TimerTask仍计划执行的使用相机的操作。它在您关闭相机后触发,因此出现错误。您需要cancel(),Timer并准备好在TimerTask您取消之前最后一个可能正在进行中。所以任务在对它进行操作之前需要检查相机是否关闭。

于 2012-04-20T19:40:45.023 回答
-1

mCamera本质上,您是在调用对象的发布方法并且操作系统已在其本机代码中发布它之后尝试使用您的对象。

该对象仍然存在(因此您的mCamera == null评估结果为false),但如果不创建新对象或调用再次获取本机资源的方法,则无法再使用该对象。

于 2012-04-20T19:38:21.573 回答