2

我注意到,在线程中播放带有 soundpool 的 SFX 时,它会在游戏中产生 FPS 减速,而在主线程中播放 SFX 时,游戏不会减速。

为什么 soundpool 从主线程播放效果更好?

这是播放调用:

streamID[sound] = soundPool.play(soundID[sound], getSoundEffectsVolume(), getSoundEffectsVolume(), 0, loop, 1);
4

1 回答 1

4

这是因为 SoundPool 是一匹黑马,它是在native 层实现的。所以每次你打电话时SoundPool.play(),你都会在内部创建新线程。
因此,当您play在 UI 线程中直接调用时,您将获得:1 个主线程 + 1 个 AudioTrack 线程(在 play 调用中创建)。当您调用play工作线程时,您将获得:1 个主线程 + 1 个工作线程 + 1 个播放线程。更多线程 == 剩余资源更少。

此外,当您调用playui 线程时,您将获得更低的延迟。因为只有一个切换:从 ui 到 audioTrack 线程,而不是两个:从 main 到 worker,从 worker 到 audiotrack 线程。

于 2020-01-14T12:26:19.547 回答