我是Android編程的新增相關性。配置更改後的Asynctask
從我的活動我火了AA的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仍在運行,並且無法及時取消並且創建新的。新的麥克風無法使用,因爲它已經被我之前的asynctask所採用。
有什麼我可以做到這一點乾淨嗎?
我試過在AndroidManifest.xml中使用android:configChanges="keyboardHidden|orientation"
,但是從我讀到的問題仍然存在......它只是在方向更改時被屏蔽。
長期的解決方案;切換到碎片和AsyncTaskLoaders。 – Krylez