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

基本的に、mCamerareleaseメソッドが呼び出され、OSがネイティブコードでオブジェクトをリリースした後で、オブジェクトを使用しようとしています。

オブジェクトはまだ存在しますが(したがって、にmCamera == null評価されますfalse)、新しいオブジェクトを作成するか、ネイティブリソースを再度取得するメソッドを呼び出さないと、オブジェクトを使用できなくなります。

于 2012-04-20T19:38:21.573 に答える