2011-01-28 49 views
9

我有一個應用程序,它由服務和特定事件的服務啓動的活動組成。該服務可能創建&使用AudioRecord & AudioTrack類 - 在此時顯示應用程序的活動。問題是如果活動暫停(即,調用onPause())我開始獲取RecordThread:緩衝區溢出錯誤?AudioFlinger(59):RecordThread:活動暫停時緩衝區溢出?

我的猜測是AudioRecorder正在主線程中運行。而且,即使它是由服務創建的,當Activity暫停讀取停止時,緩衝區溢出?必須在單獨的線程中完成AudioRecorder讀取,即使它正在服務中運行?

任何幫助將不勝感激,謝謝。

回答

8

當您沒有足夠快地從AudioRecord對象提取數據時,會發生RecordThread緩衝區溢出。

你絕對應該有一個從AudioRecord對象在sperate線程中提取數據的循環,如果你的活動被暫停,你應該停止該線程(除非你想在後臺記錄。)

這裏有工作實現的幾個例子:

+0

謝謝!是的,我想在後臺錄製 – dchappelle 2011-02-03 21:33:15

1

雖然這是一個老問題,但我希望在開始使用服務時知道這個答案,所以我會將其記錄下來供其他人蔘考以供將來參考:

雖然經常被忽視,但有關服務的非常重要的一點是,自動產生自己的線程,但在主GUI線程上運行。這在考慮「服務」這個詞時是非常直觀的,但仍然是正確的。 (請參閱http://developer.android.com/guide/topics/fundamentals/services.html的第一個'注意事項'部分)。

您可能還想考慮擴展IntentService類而不是Service類,該類將「...創建一個執行所有意圖的默認工作線程......與應用程序的主線程分開。 (http://developer.android.com/guide/topics/fundamentals/services.html)

希望有人認爲這有用!