我正在写一个安卓应用程序,播放音乐使用录制的样本(使用SoundPool)。我有一个播放器,检查我必须根据当前时间(realTimeElapsed)播放哪些样本。播放器通过我设置为1毫秒的计时器进行更新。大多数情况下,这可以正常工作,但有时我会有一些大约100毫秒的延迟。
我找不到一种方法来提高定时器的优先级,有没有其他方法来解决这些延迟?
我同时使用openGL渲染一个场景,但是如果我禁用所有的绘图,我会得到相同的延迟。
谢谢
编辑:
我用TraceView对其进行了分析:音频线程(Thread16)每毫秒执行一次。但在t=2580有大约200毫秒的中断。在此期间,线程并未处于睡眠状态,而是在方法SoundPool.play中,并被中断。每次我有这样的延迟,音频线程都会被中断。没有一种方法可以防止这些中断吗?
我已经将GL线程(中断音频线程)的优先级设置为THREAD_PRIORITY_LOWEST。

右键单击图像并选择“显示图像”或其附近的内容以查看全分辨率图像。
发布于 2012-04-14 12:57:09
我建议尝试Handler.postDelayed()而不是Timer,看看是否能得到更好的结果。
如果不是,也许只是一个带有短Thread.Sleep()的线程,并检查System.nanoTime()
https://stackoverflow.com/questions/10150670
复制相似问题