我的团队有应用程序,它将处理实时音频流。我们所做的是从服务器获取音频并通过MediaCodec将其解码为PCM,然后发送到AudioTrack以在另一个线程中播放。 在Android 4.x中,APP在后台运行时没有问题。但是,在5.x中,它无法在后台运行。
通过logcat,我们发现App在后台运行时存在两个问题。 首先,计时器变慢。我们使用计时器定期向AudioTrack发送PCM,我们使用Android建议的Handler.sendMsgDelay()来提高效率。但是测试表明,当在后台运行时,Handler比前景更晚得到msg(我们想要20ms,但它会变成50~60ms)。我们尝试了java.util.Timer但在后台有相同的结果。我们尝试将线程设置为最大优先级。但也没有效果。
其次,即使MediaCodec在后台运行缓慢。我们发现,当在前台运行时,我们可以每隔7~8 ms从MediaCodec获取解码数据,而在后台运行30~50ms!
我们已经从谷歌播放下载了一些像在线广播的APP,并在Android 5.1中运行它。在后台运行时没有这样的问题。所以,必须有一些方法来避免它。不幸的是,我们不怎么......
我知道在Android 5.1中必须有一些节电策略才能使后台运行应用程序的线程占用更少的CPU。但谷歌关闭时必须打开另一个窗口。是否有新的API允许APP在后台运行,就像在前台一样?或者其他方式?
答案 0 :(得分:2)
使用前台服务,您的问题就会消失。