2012-04-20 3 views
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; 
    } 
} 
+0

크래시가 발생하는 것으로 보이는 실행 메소드에 코드를 게시하십시오. – dymmeh

답변

0

스택 추적에서 카메라를 사용하는 실행 일정이 여전히 예약되어있는 것 같습니다 (TimerTask). 카메라를 닫으면 오류가 발생하므로 오류가 발생합니다. cancel()Timer이 필요하며 취소하기 전에 마지막 TimerTask이 진행 중일 수도 있습니다. 따라서 작업 전에 카메라가 닫혀 있는지 확인해야합니다.

+0

앱을 종료하기 전에 TimerTask를 취소합니다. 다시 열면 미리보기가 계속 나타나지만 다른 사진을 찍으려고하면 강제로 닫힙니다. (이것은 일종의 timelapse 앱입니다). – kdhuang

+0

(@AustynMahoney : 나는 아무것도하지 않았다. 당신의 진술은 정확하다. 나는 OP의 질문이 왜 그런지 이유가 있다고 생각한다.) –

+0

@hotnspicyxp : 그렇다면 당신은 'Camera' . 'onResume()'과'onPause()'에서 카메라를 시작/정지해야합니다. 생각하지 않을 때 호출되지 않는다고 생각합니다. –

-1

을 당신의 mCamera 객체를 사용하려고 시도한 후에 릴리스 메소드가 호출되었고 OS가 네이티브 코드를 릴리스했습니다.

개체가 여전히 존재하므로 (mCamera == nullfalse) 개체를 새로 만들거나 원래 리소스를 다시 가져 오는 메서드를 호출하지 않으면 더 이상 개체를 사용할 수 없습니다.

관련 문제