当我点击按钮在我的应用程序上播放声音,但点击一会儿就不再播放了。也许这是记忆问题?你能解决我的问题吗?这是通过SoundPool实现的播放声音:当我点击按钮时我称之为播放方法:并且播放方法工作背景线程
private void play(int resId) {
soundPool = buildBeforeAPI21();//TODO: refactor with deprecated constructor
soundPool.load(activity, Integer.parseInt(resId), 1);
}
public SoundPool buildBeforeAPI21() {
if (soundPool == null) {
soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
if (status == 0) {
soundPool.play(sampleId, 1.0f, 1.0f, 1, 0, 1.0f);
}
}
});
}
return soundPool;
}
答案 0 :(得分:1)
每次点击都不要创建新的SoundPool。这非常浪费。这样做:
1)只创建一次SoundPool 2)加载你想要播放的所有声音,只需一次 3)等待所有声音加载 4)每次点击都可以调用soundPool.play()。
答案 1 :(得分:0)
也许这个答案来得太晚了;但是我们走了问题在于
行soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
那' 2' number是int maxStreams,遵循文档"此SoundPool对象的最大并发流数" (你可以深入研究here)。现在更改它并将其设置为10,例如,再试一次。然后,你可以根据自己的意愿调整它。所以:
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
希望这有帮助(如果仍然有必要)。