2012-11-05 123 views
0

我是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",但是從我讀到的問題仍然存在......它只是在方向更改時被屏蔽。

+0

長期的解決方案;切換到碎片和AsyncTaskLoaders。 – Krylez

回答

0

當方向改變onCreate將被觸發。所以如果您的應用程序有定位支持,請不要在onCreate中啓動任何AsyncTask。