2013-02-26 71 views
0

我正在爲某些語音處理製作應用程序。對於語音錄音則使用Android AudioRecord類。 AudioRecord實例放入服務中。一個單獨的線程用於調用類的方法AudioRecord類(在SO上有足夠的例子)。讀取的樣本被轉發到我的本地代碼以供進一步處理,並且它們被放入一些隊列中。在本地代碼中,一個線程正在執行處理。問題是這個線程永遠不會獲得處理器時間。 在完成我的應用程序時,我調用了一些清理我的本地資源的函數。但它發生的整個清理過程還沒有完成(我使用通話建立它)。當我再次啓動應用程序時,我的本機處理開始了(閱讀新樣本尚未開始)。當AudioRecord運行時,本機線程永遠不會獲得處理器時間

閱讀線程是否有可能僅爲自己使用處理器?我可以爲我的本機(處理器)線程設置更高的優先級嗎?或者它可能是一些其他問題。

我甚至嘗試過使用AudioRecord.OnRecordPositionUpdateListeneronPeriodicNotification但沒有成功。

+0

您是否嘗試附加執行處理的本機線程以查看這是否讓它調度?你有多少原生線程?你如何附加訪問隊列的人? – didierc 2013-02-27 00:54:25

+0

我只有這一個本地線程。我沒有附加線程訪問隊列,因爲我沒有任何信息從Java代碼。爲什麼我應該這樣做? – sinisha 2013-02-27 10:26:41

回答

0

我找到了解決方案。這是我移植的庫中的一個錯誤。一個處理塊調用sleep方法。這個庫首次在windows下使用,睡眠時間以毫秒爲單位。這一次移植後是在幾秒鐘內。所以我的本地線程睡了50秒,而不是50毫秒。

相關問題