我正在编写一个使用录制样本播放音乐的Android应用程序(使用SoundPool)。我有一个播放器,根据当前时间(realTimeElapsed)检查我必须播放的样本。播放器使用我设置为1 ms的Timer进行更新。大部分时间这种方法都很好,但有时我会有一些约100毫秒的延迟。
我找不到提高计时器优先级的方法,还有另一种方法可以解决这些延迟吗?
我正在使用openGL同时渲染场景,但如果禁用所有绘图,我会得到相同的延迟。
由于
编辑:
我用TraceView分析它:音频线程(Thread-16)每ms执行一次。但是在t = 2580时,有大约200ms的中断。在此期间线程未处于休眠状态,但在方法SoundPool.play中被中断。每次我有这样的延迟,音频线程都会被中断。有没有办法防止这些中断?
我已将GL Thread(中断音频线程)的优先级设置为THREAD_PRIORITY_LOWEST。
右键单击图像并选择“显示图像”或靠近该图像以全分辨率查看图像。
答案 0 :(得分:0)
我建议尝试Handler.postDelayed()而不是Timer,看看你是否会得到更好的结果。
如果没有,可能只是一个短Thread.Sleep()的帖子,并检查System.nanoTime()?