Android 5.1使后台运行应用程序运行缓慢且计时器不精确

Android 5.1使后台运行应用程序运行缓慢且计时器不精确,android,timer,Android,Timer,我的团队有一个可以处理实时音频流的应用程序。我们所做的是从服务器获取音频,并在一个线程中通过MediaCodec将其解码为PCM,然后发送到AudioTrack,在另一个线程中播放。 在安卓4.x中,当应用程序在后台运行时没有问题。然而,在5.x中,它不能在后台工作 通过logcat,我们发现应用程序在后台运行时存在两个问题。 首先,计时器变慢。我们使用计时器定期将PCM发送到AudioTrack,并按照Android的建议使用Handler.sendMsgDelay()以提高效率。但是测试表明

我的团队有一个可以处理实时音频流的应用程序。我们所做的是从服务器获取音频,并在一个线程中通过MediaCodec将其解码为PCM,然后发送到AudioTrack,在另一个线程中播放。 在安卓4.x中,当应用程序在后台运行时没有问题。然而,在5.x中,它不能在后台工作

通过logcat,我们发现应用程序在后台运行时存在两个问题。 首先,计时器变慢。我们使用计时器定期将PCM发送到AudioTrack,并按照Android的建议使用Handler.sendMsgDelay()以提高效率。但是测试表明,当在后台运行时,处理程序比在前台获取消息要晚得多(我们想要20毫秒,但它变为50~60毫秒)。我们尝试了java.util.Timer,但在后台得到了相同的结果。我们尝试将线程设置为最大优先级。但也没有效果

其次,即使是在后台运行缓慢的MediaCodec。我们发现,当在前台运行时,MediaCodec每7~8毫秒就可以获得一次解码数据,而在后台运行则为30~50毫秒

我们从谷歌play下载了一些类似在线广播的应用程序,并在安卓5.1上运行。在后台运行时没有这样的问题。所以,一定有办法避免它。不幸的是,我们不知道如何


我知道Android 5.1中必须有一些节能策略,以使后台运行应用程序的线程占用更少的CPU。但谷歌必须在关闭一个窗口时打开另一个窗口。是否有新的API允许应用程序像在前台一样在后台运行?或者其他方式?

使用前台服务,您的问题就会消失。

使用前台服务,您的问题就会消失。

谢谢。我将首先尝试一下,并在这里分享结果。谢谢。我将首先尝试一下,并在这里分享结果。