每次按下按钮时,我的应用程序都会播放硬币声音。
coin_sound.start();
您可以轻松按下比硬币声音更快的声音。发生这种情况时,我希望每次按下按钮时硬币声音都从头开始。
if(coin_sound.isPlaying()){
coin_sound.reset();
coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
}
coin_sound.start();
这样做的问题是加载一个很小的媒体文件仍然是一个相对缓慢的过程。当您开始非常快地点击按钮时,应用程序会严重滞后。
我的问题有什么解决方案吗?我唯一的想法是用一组 coin_sounds 做一些事情,但这种方法看起来会很困惑和恶心......
最佳答案
此处发布的另一个答案有些正确。您不应该一遍又一遍地调用 create
。
不过,该答案中的代码有问题。 reset
方法将 MediaPlayer
发送到空闲状态,在这种状态下调用大多数其他方法是非法的。如果您要走那条路线,则必须按以下顺序调用方法:
coin_sound.reset();
coin_sound.setDataSource(...);
coin_sound.prepare();
coin_sound.start();
调用 create
与之前的方法调用序列之间的区别只是创建了一个新实例。然而,这并不是完成应做之事的最快方法。
当您想要重新播放当前播放的声音时,您只需调用 coin_sound.seekTo(0);
。所以做这样的事情:
if (coin_sound.isPlaying()) coin_sound.seekTo(0);
else coin_sound.start();
假设您已将 MediaPlayer
置于准备状态,以便可以调用 start
。您可以通过在 onCompletion
监听器中调用 reset
、setDataSource
和 prepare
来完成此操作。此外,确保在不再需要声音时调用 release
。
关于java - 安卓声音重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19329753/