android - SoundPool play()... 在线程或主 UI 线程中更好?

标签 android multithreading soundpool android-sound

我注意到,在线程中播放带有 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/

相关文章:

android - 找不到适用于我的 Android 手机的 ADB 驱动程序

android - 以编程方式更改在android设备中从未知来源安装apk的权限

android - Android 中旋转设备后 Fragment 字段为 NULL

c++ - 赋值运算符 '=' 是原子的吗?

Android .ogg 文件在几秒钟后停止播放

java - 资源$NotFoundException : File res/drawable-anydpi-v21/ic_upsc. xml

c# - 从控制台在新线程上创建表单

java - 一个线程生成多个线程并在 3 个级别之前执行相同操作的设计模式或最佳实践

安卓 : How to change Playback Rate of music using OpenSL ES

android - Android声音池无法正常工作