3

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

我找不到增加计时器优先级的方法,还有其他方法可以解决这些延迟吗?

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

谢谢

编辑:

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

我已将 GL 线程(中断音频线程)的优先级设置为 THREAD_PRIORITY_LOWEST。 跟踪视图

右键单击图像并选择“显示图像”或附近的东西以全分辨率查看图像。

4

1 回答 1

0

我建议尝试Handler.postDelayed()而不是 Timer,看看你是否能得到更好的结果。

如果没有,也许只是一个带有短Thread.Sleep()的线程,并检查System.nanoTime()

于 2012-04-14T04:57:09.460 回答