1

在子活动中,我使用 MediaRecorder 录制了一些音频,并有两个按钮:第一个按钮将开始录制,第二个按钮将返回其父活动。但是,每次我点击返回按钮时,都需要很长时间才能返回到主要活动的视图。我在返回按钮回调中的代码是:

public void onClick(View arg0) {        
        if (arg0.getId() == R.id.startRecord) 
        {
           StartRecording();
        } 

        else if (arg0.getId() == R.id.goBack) 
       {
       if(mediaRecorder!=null)
           {
             mediaRecorder.stop();
             mediaRecorder.release();
             mediaRecorder = null;
           }
       this.finish();

       }
   }

父活动的onCreate()方法只启动几个按钮并为它们设置监听器方法。我真的不明白为什么回去行动会花很长时间。一个值得一提的现象是,如果我不先录制,而是先点击返回按钮,它会很快返回到父活动。只有在我录制了一些音频后才会出现较长的响应时间。我确实上传了录制的音频,但是我将上传放在了一项AsyncTask任务中,上传工作完成后我可以获得反馈。在我看到反馈后,甚至等待一段时间后,返回按钮仍然需要很长时间才能让我回到主要活动。有人对此有建议吗?谢谢!

4

1 回答 1

1

您可以覆盖后退按钮,尽管从我所看到的情况来看,似乎很多开发人员对这个想法并不友好。

@Override
public void onBackPressed() {
   mediaRecorder.stop();
   mediaRecorder.release();
   mediaRecorder.reset();
   mediaRecorder = null;
}

看看这是否适合你。


更好的是,这样的东西可能更有用,这样您就可以轻松地调用该stop()方法:

public void onClick(View arg0) {        
    if (arg0.getId() == R.id.startRecord) {
        StartRecording();
    } else if (arg0.getId() == R.id.goBack) {
        if(mediaRecorder!=null) {
        stopRecording();
    }
    this.finish();
}


public void stopRecording() throws IOException {
    mediaRecorder.stop();
    mediaRecorder.release();
    mediaRecorder.reset();
    mediaRecorder = null;
}

@Override
public void onBackPressed() {
   stopRecording();
}
于 2012-08-16T18:56:17.633 回答