Android:播放音频的精确计时

Android:播放音频的精确计时,android,audio,timer,Android,Audio,Timer,我正在编写一个android应用程序,它使用录制的样本(使用SoundPool)播放音乐。我有一个播放器,根据当前时间(realtimeessed)检查我必须播放的样本。播放器会被我设置为1毫秒的计时器更新。大多数情况下,这可以正常工作,但有时我会有大约100毫秒的延迟 我找不到增加计时器优先级的方法,是否有其他方法可以避免这些延迟 我同时使用openGL渲染场景,但是如果禁用所有图形,我会得到相同的延迟 谢谢 编辑: 我用TraceView进行了分析:音频线程(thread-16)每毫秒执行一

我正在编写一个android应用程序,它使用录制的样本(使用SoundPool)播放音乐。我有一个播放器,根据当前时间(realtimeessed)检查我必须播放的样本。播放器会被我设置为1毫秒的计时器更新。大多数情况下,这可以正常工作,但有时我会有大约100毫秒的延迟

我找不到增加计时器优先级的方法,是否有其他方法可以避免这些延迟

我同时使用openGL渲染场景,但是如果禁用所有图形,我会得到相同的延迟

谢谢

编辑:

我用TraceView进行了分析:音频线程(thread-16)每毫秒执行一次。但在t=2580时,中断时间约为200ms。在此期间,线程未处于睡眠状态,而是在方法SoundPool.play中,并被中断。每次我有这样的延迟,音频线程就会中断。难道没有办法防止这些干扰吗

我已经将GL线程(中断音频线程)的优先级设置为线程优先级最低。

右键单击图像,然后选择“显示图像”或其附近的某个位置,以全分辨率查看图像。

我建议尝试而不是使用计时器,看看是否可以获得更好的结果


如果没有,可能只是一个简短的线程,并检查?

您好,谢谢您的回答。我尝试了这两种方法,但都没有真正成功:使用Handler.postdayed与计时器大致相同;我目前正在使用自己的线程,具有高优先级,睡眠时间为1毫秒,但我仍然会得到大约100毫秒的延迟…200毫秒听起来有点大。是否可能是由于垃圾收集?当垃圾回收发生时,会有一条消息打印到logcat。只需确保它是来自您的进程的消息,而不是其他随机进程。此时没有正在运行的GC,您将在TraceView中看到GC。在这200毫秒内,OpenGL线程一直在运行(请右键单击图像并选择“显示图像”或其附近的某个位置以全分辨率查看图像),这一定是声音池的问题,如果我不调用声音池的播放方法,我一点延迟都没有。我必须为这个问题打开一个新线程