0

私は Android プログラミングの初心者です。

私のアクティビティから、これを行う Asynctask を起動します。

onPreExecute(): AudioRecord をセットアップし、録音の準備を整えます

doInBackground():

while (!isCancelled())    {
    try
    {     
        shortsRead = recorder.read(intputbuffer,0,size);
        if (shortsRead <= 0)  {
            Log.e("AudioRead", "Audioread failed buffersize tried:" + " Sizeread:" + shortsRead);

           recorder.stop();
           recorder.release();
           Thread.sleep(500); 
           int bufferSizeInBytes = 4096 * 2;
           recorder = new AudioRecord(AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes);
           recorder.startRecording();

        }
    }
    catch(Throwable x)
    { 
         Log.w("Audio", "Error reading voice audio", x);
    }

}
recorder.stop();
recorder.release();
Log.i("Audio", "Killed Audio Thread");

構成を変更すると (向きを切り替える)、onDestroy (asynctask をキャンセル) が実行され、次に onCreate が立て続けに実行されます。

私が信じているのは、以前の Asynctask がまだ実行中であり、時間内にキャンセルできず、onCreate が新しいものを作成することです。新しいものは、以前の asynctask によって既に取得されているため、マイクを取得できません。

これをきれいにするために私にできることはありますか?

android:configChanges="keyboardHidden|orientation"は AndroidManifest.xml で使用しようとしましたが、私が読んだところ、問題はまだ残っています...向きの変更でマスクされているだけです。

4

2 に答える 2

0

向きが変更されると、onCreate が起動されます。したがって、アプリが向きをサポートしている場合は、onCreate で AsyncTask を開始しないでください。

于 2012-11-05T05:05:21.103 に答える
0

画面回転中に AsyncTask を処理するには? . Romain Guy のコメントをご覧ください。こちらのリンクもご覧ください。https://groups.google.com/forum/?fromgroups=#!topic/android-developers/4dW4-KMUKJI . これはあなたを助けるはずです。

于 2012-11-05T05:06:05.647 に答える