0

我是 Android 编程的相对论新手。

从我的活动中,我触发了执行此操作的 Asynctask:

onPreExecute():设置 AudioRecord 并准备好录制

做背景():

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(取消异步任务),然后快速连续运行 onCreate。

我相信发生的是以前的 Asynctask 仍在运行并且无法及时取消并且 onCreate 会创建一个新的。新的无法拿到麦克风,因为它已经被我之前的异步任务占用了。

我可以做些什么来干净地做到这一点吗?

我尝试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 回答