配置更改后的Asynctask

时间:2012-11-05 04:51:56

标签: android android-asynctask audiorecord

我是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占用了。

我能做些干净利落的事吗?

我尝试在AndroidManifest.xml中使用android:configChanges="keyboardHidden|orientation"但是从我读到的问题仍然存在......它只是在方向更改时被屏蔽了。

2 个答案:

答案 0 :(得分:0)

当方向改变时,onCreate将被触发。因此,如果您的应用程序具有方向支持,请不要在onCreate中启动任何AsyncTask。

答案 1 :(得分:0)

How to handle an AsyncTask during Screen Rotation?。看看Romain Guy的评论。另外看看这个链接。 https://groups.google.com/forum/?fromgroups=#!topic/android-developers/4dW4-KMUKJI。这应该对你有帮助。