1

子アクティビティでは、MediaRecorder を使用していくつかのオーディオを録音し、2 つのボタンがあります。1 つ目は録音を開始し、2 つ目は親アクティビティに戻ります。ただし、戻るボタンを押すたびに、メインアクティビティのビューに戻るのに時間がかかります。戻るボタンのコールバック内の私のコードは次のとおりです。

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 に答える