我在使用 SoundPool 时遇到性能问题。每次播放声音时,帧速率都会下降。我添加了一些日志,我可以在 logcat 上看到“播放”功能有时需要 8 毫秒。
我正在使用 *.ogg 文件,并且 SoundPool 初始化是在应用程序启动时完成的:
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
mSoundPool = new SoundPool(size, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap<Integer, Integer>();
mSoundPoolMap.put(index, mSoundPool.load(context, R.raw.shot, 1));
要播放声音,我使用以下代码(在游戏循环内):
mSoundPool.play(id, streamVolume, streamVolume, 1, loop, 1f);
我的问题是:
- 我应该在游戏循环之外的另一个线程上调用“播放”吗?
- 我应该通过服务调用“播放”吗?
- 我做错什么了吗?
谢谢!
更新:
我刚刚测试了在另一个线程上播放声音并通过服务播放声音,但延迟仍然存在。
然后我做了以下测试: * 以 1000 毫秒的间隔播放声音 -> 延迟总是发生 * 以 200 毫秒的间隔播放声音 -> 延迟永远不会发生
这怎么可能?!?!?经过这些测试,似乎什么都没有播放的时候,SoundPool正在重置,当它要再次播放时,初始化需要更长的时间……很奇怪!