我是 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 中使用,但从我读到的问题仍然存在......它只是在方向变化时被掩盖了。