title: java.lang.RuntimeException: Method called after release()
body: <ol>
  <li><p>If i am <em>not using</em> <strong>mCamera.release();</strong> in <strong><em>surfaceDestroyed(....)</em></strong> then <strong><em>not able to launch CameraActivity again from another Activity</em></strong> [in short getting <strong>Unfortunately app has stopped</strong>] error, <strong><em>even not releasing Camera</em></strong>, but if <em>i do tap on Home button</em> [<strong>from CameraActivity</strong>], and then <strong><em>again launching my app</em></strong>, not getting any error <strong>(in short works fine, and opening CameraActivity without any problem)</strong></p></li>
  <li><p>And if i am <strong><em>using</em></strong> *<em>mCamera.release();</em>* in <strong><em>surfaceDestroyed(....)</em></strong> then <strong><em>able to launch CameraActivity again from another Activity</em></strong> and <strong><em>releasing Camera as well</em></strong>, but <strong><em>when i do tap on Home button, and then again launching my app, getting Unfortunately app has stopped</em></strong>....:</p></li>
  </ol>
  
  <p>But i <strong>want both things working together</strong> (first, <strong><em>Tap on Home from CameraActivity, and again launch app from CameraActivity</em></strong> - without any error) and (second, <strong><em>launching camera from another activity</em></strong> - without any error)</p>
  
  <p>Like i wrote, both the things are working for me, but not together..... </p>
  
  <p><strong>Line number 33 is:</strong> </p>
  
  <pre><code>        Camera.Parameters parameters = mCamera.getParameters();
  </code></pre>
  
  <p><strong>complete Log:</strong></p>
  
  <pre><code>12-30 12:18:58.070: W/dalvikvm(14822): threadid=1: thread exiting with uncaught exception (group=0x41ef72a0)
  12-30 12:18:58.080: E/AndroidRuntime(14822): FATAL EXCEPTION: main
  12-30 12:18:58.080: E/AndroidRuntime(14822): java.lang.RuntimeException: Method called after release()
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.hardware.Camera.native_getParameters(Native Method)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.hardware.Camera.getParameters(Camera.java:1487)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at app.micheal.camr.PreviewSurface.surfaceCreated(PreviewSurface.java:33)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.SurfaceView.updateWindow(SurfaceView.java:609)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:235)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.View.dispatchWindowVisibilityChanged(View.java:7686)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1047)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1047)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1047)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1047)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1047)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1339)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1114)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4520)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.Choreographer.doFrame(Choreographer.java:525)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.os.Handler.handleCallback(Handler.java:615)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.os.Handler.dispatchMessage(Handler.java:92)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.os.Looper.loop(Looper.java:137)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at android.app.ActivityThread.main(ActivityThread.java:4921)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at java.lang.reflect.Method.invokeNative(Native Method)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at java.lang.reflect.Method.invoke(Method.java:511)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
  12-30 12:18:58.080: E/AndroidRuntime(14822):    at dalvik.system.NativeStart.main(Native Method)
  12-30 12:19:08.095: I/Process(14822): Sending signal. PID: 14822 SIG: 9
  </code></pre>
  
  <p><strong>PreviewSurface.java:</strong></p>
  
  <pre><code>public class PreviewSurface extends SurfaceView implements
  SurfaceHolder.Callback {
  
      public static final String LOG_TAG = "CameraPreview";
      private SurfaceHolder mSurfaceHolder;
  
      private Camera mCamera;
      Camera.Parameters parameters = null ;
  
      // Constructor that obtains context and camera
      @SuppressWarnings("deprecation")
      public PreviewSurface(Context context, Camera camera) {
          super(context);
          this.mCamera = camera;          
          this.mSurfaceHolder = this.getHolder();
          this.mSurfaceHolder.addCallback(this);
          this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
          this.mSurfaceHolder.setFixedSize(100, 100);
      }
  
      @Override
      public void surfaceCreated(SurfaceHolder surfaceHolder) {
          try {       
                  parameters = mCamera.getParameters();
  
                  if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) 
                  {
                       parameters.set("orientation", "portrait");
                       mCamera.setDisplayOrientation(90);
                       parameters.setRotation(90);
                       mCamera.setPreviewDisplay(surfaceHolder);
                       mCamera.startPreview();
                  }
                  else 
                  {
                       // This is an undocumented although widely known feature
                       parameters.set("orientation", "landscape");
                       // For Android 2.2 and above
                       mCamera.setDisplayOrientation(0);
                       // Uncomment for Android 2.0 and above
                       parameters.setRotation(0);
                  }
  
                  mCamera.setPreviewDisplay(surfaceHolder);
                  mCamera.startPreview();
  
              } catch (IOException e) {
                  // left blank for now
              }
      }
  
      @Override
      public void surfaceDestroyed(SurfaceHolder surfaceHolder) {         
          mCamera.stopPreview();
          mCamera.release();          
      }
  
  
      @Override
      public void surfaceChanged(SurfaceHolder surfaceHolder, int format,
              int width, int height) {
  
          try {       
              parameters = mCamera.getParameters();
              if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
                   parameters.set("orientation", "portrait");
                   mCamera.setDisplayOrientation(90);
                   parameters.setRotation(90);
  
              }
                   else {
                        // This is an undocumented although widely known feature
                        parameters.set("orientation", "landscape");
                        // For Android 2.2 and above
                        mCamera.setDisplayOrientation(0);
                        // Uncomment for Android 2.0 and above
                        parameters.setRotation(0);
              }
              mCamera.setPreviewDisplay(surfaceHolder);
              mCamera.startPreview();
  
  
          } catch (IOException e) {
              // left blank for now
          }           
      }
  
  }
  </code></pre>