在单独的线程中播放短声音
Posted
技术标签:
【中文标题】在单独的线程中播放短声音【英文标题】:Playing short sounds in separate thread 【发布时间】:2014-04-06 11:42:08 【问题描述】:在我的安卓游戏中,有 36 个落球。当球触地时会发出声音。声音很小,只有0.3秒。我正在使用soundpool
类来播放它。游戏中可能会发生所有 36 个球快速连续落下的情况。多次播放声音可能会阻塞 UI 线程。是否建议在单独的线程上播放声音?
【问题讨论】:
【参考方案1】:是的!您应该在单独的线程上播放声音。检查为类似问题提供的解决方案here
【讨论】:
不会为每次播放声音产生一个新线程会影响性能/动画? 您使用的是 OpenGL 还是 Canvas?在 OpenGL 中,GLSurfaceView 创建 UI 线程和 Renderer 线程。 Renderer.onDrawFrame() 应该做最少的工作来获得最高的 FPS。声音、音乐和游戏逻辑(AI、物理等)不需要运行每一帧,所以你可以把它们放在另一个线程中。您不必在每次播放声音时“生成”一个新线程。 thread.start() 只能使用一次,因此要在非 UI 线程中重放声音,必须生成一个新线程 好的,我明白了。您启动线程以播放声音并在声音完成播放时“停止”它。如果您不是快速连续玩,这没关系,但在您的情况下,这是不可取的。我的意思是 - 启动线程一次并在它的 run() 方法中播放/停止声音。然后在游戏结束/重新启动时“停止”线程 当 run 方法执行后,线程会自动死掉……对吧?那么如何根据用户输入重复使用它来一次又一次地播放声音。以上是关于在单独的线程中播放短声音的主要内容,如果未能解决你的问题,请参考以下文章