SoundPool play()…在线程中还是在主UI线程中更好?

问题描述 投票:0回答:1

[我注意到,在线程中使用声音池播放SFX时,它会在游戏中产生FPS减慢,而在主线程中播放SFX时,游戏不会减慢速度。

为什么声音池在主线程中播放效果更好?

这是播放电话:

streamID[sound] = soundPool.play(soundID[sound], getSoundEffectsVolume(), getSoundEffectsVolume(), 0, loop, 1);
android multithreading soundpool android-sound
1个回答
0
投票

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

此外,当您在ui线程中调用play时,您将获得较低的延迟。因为只有一个开关:从ui到audioTrack线程,而不是两个:从main到worker,从worker到audiotrack线程。

© www.soinside.com 2019 - 2024. All rights reserved.