[我注意到,在线程中使用声音池播放SFX时,它会在游戏中产生FPS减慢,而在主线程中播放SFX时,游戏不会减慢速度。
为什么声音池在主线程中播放效果更好?
这是播放电话:
streamID[sound] = soundPool.play(soundID[sound], getSoundEffectsVolume(), getSoundEffectsVolume(), 0, loop, 1);
因为SoundPool是一匹黑马,所以它在native layer中实现。因此,每次调用SoundPool.play()
时,都将在内部创建新线程。因此,当您在UI线程中直接调用play
时,您将获得:1个主线程+ 1个AudioTrack线程(在播放调用中创建)。在工作线程中调用play
时,您将获得:1个主线程+ 1个工作线程+ 1个播放线程。更多线程==剩余资源更少。
此外,当您在ui线程中调用play
时,您将获得较低的延迟。因为只有一个开关:从ui到audioTrack线程,而不是两个:从main到worker,从worker到audiotrack线程。