我是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"
但是从我读到的问题仍然存在......它只是在方向更改时被屏蔽了。
答案 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。这应该对你有帮助。