2016-03-19 19 views
0

我的團隊有應用程序,它將處理實時音頻流。我們所做的是從服務器獲取音頻,並通過MediaCodec將其解碼爲PCM,然後發送到AudioTrack以在另一個線程中播放。 在Android 4.x中,APP在後臺運行時沒有任何問題。但是,在5.x中,它不適用於後臺。Android 5.1讓後臺運行APP慢,定時器不精確

通過logcat,當App在後臺運行時發現兩個問題。 首先,計時器變慢。我們使用計時器定期將PCM發送到AudioTrack,並且我們使用Android所建議的Handler.sendMsgDelay()來提高效率。但是測試表明,在後臺運行時,Handler比前臺晚得多(我們想要20ms,但是會變成50〜60ms)。我們嘗試使用java.util.Timer,但在後臺使用相同的結果。我們嘗試將線程設置爲最大優先級。但是也沒有效果。

二,即使MediaCodec在後臺運行緩慢。我們發現,在前臺運行時,我們可以每隔7〜8ms從MediaCodec獲取解碼數據,而在背景中運行30〜50ms!

我們已經從谷歌播放下載一些應用程序,如在線廣播,並在Android 5.1中運行它。在後臺運行時沒有這樣的問題。所以,必須有一些方法來避免它。不幸的是,我們不怎麼...

我知道在Android 5.1中必須有一些省電策略才能使後臺運行應用程序的線程獲得更少的CPU佔用。但是,谷歌必須在關閉一個窗口時打開另一個窗口是否有新的API允許APP像在前臺一樣在後臺運行?或者以其他方式?

回答

2

使用前臺服務,您的問題將消失。

+0

謝謝。我會先嚐試一下,並在這裏分享結果。 – Chandler