2017-10-18 122 views
0

我知道如何返回到往常的活动。当前活动(VideoActivity.java)的SurfaceViewMediaRecorder录制视频。每当我实现finish()恢复到以前的活动,它导致错误像下面的logcat:当前活动使用SurfaceView时如何返回到上一个活动?

E/BufferQueueProducer: [SurfaceView] dequeueBuffer: BufferQueue has been abandoned 
E/EmulatedCamera_Preview: onNextFrameAvailable: Unable to dequeue preview window buffer: 19 -> No such device 

的logcat的只是重复上述两行,成为很长的名单,因此我只是表明这2行。

除了显示上面的logcat,只要我意图VideoActivity.java应用程序停止。

这是我如何实现返回到之前的活动

backButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(isRecording){ 
        stopRecording(); 
        finish(); 
       }else{ 
        finish(); 
       } 

     } 
    }); 

基本上我实现这样的SurfaceView:

​​

此代码工作正常之前,我回到以前的活动使用finish()

所以我的问题是,如果有一个活动SurfaceView,它如何返回到先前的活动?请告诉我正确的方法。

回答

0

我意识到我没有finish()CameraMediaRecorder。我能够通过发行来解决这个CameramediaRecorder释放,所以代码是这个样子

back.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(isRecording){ 
        Log.d("Video","stop recording"); 
      try{ 
        mRecorder.stop(); 
      }catch (RuntimeException e) { 

      } 
      releaseMediaRecorder(); 
      mCamera.lock(); 
      isRecording = false; 
      releaseCamera(); 
        finish(); 
       }else{ 
        releaseCamera(); 
        finish(); 
       } 

      } 
     }); 
} 

private void releaseCamera(){ 
     if (mCamera != null){ 
      // release the camera for other applications 
      mCamera.setPreviewCallback(null); 
      surfaceHolder.removeCallback(VideoActivity.this); 
      mCamera.release(); 
      mCamera = null; 
     } 
} 

private void releaseMediaRecorder(){ 
     if (mRecorder != null) { 
      // clear recorder configuration 
      mRecorder.reset(); 

      mRecorder.release(); 
      mRecorder = null; 

      mCamera.lock(); 
     } 
}