2017-10-18 124 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(); 
     } 
}