我注意到,在线程中播放带有 soundpool 的 SFX 时,它会在游戏中产生 FPS 减速,而在主线程中播放 SFX 时,游戏不会减速。
为什么 soundpool 从主线程播放效果更好?
这是播放调用:
streamID[sound] = soundPool.play(soundID[sound], getSoundEffectsVolume(), getSoundEffectsVolume(), 0, loop, 1);
最佳答案
因为SoundPool是一匹黑马,在native layer中实现.所以每次您调用SoundPool.play()
您将在内部创建新线程。
所以当你调用play
在 UI 线程中,您将获得:1 个主线程 + 1 个 AudioTrack 线程(在 play 调用中创建)。当您调用 play
在工作线程中,您将获得:1 个主线程 + 1 个工作线程 + 1 个播放线程。更多线程 == 剩余资源更少。
此外,当您调用 play
时在 ui 线程中,您将获得更低的延迟。因为只有一个切换:从 ui 到 audioTrack 线程,而不是两个:从 main 到 worker,从 worker 到 audiotrack 线程。
关于android - SoundPool play()... 在线程或主 UI 线程中更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427501/