从Media Player切换到Media Player强制关闭

时间:2014-07-23 16:12:18

标签: android media-player forceclose

你一直在研究我的应用程序,并且发现了一项似乎无法克服的活动的障碍。活动本质上是一个大型的新奇钢琴,有8个按键播放声音,侧面有6个按钮,可以改变音符和音符本身的图像,这个我完成了:-)现在我想为每个添加一个背景歌曲不同的笔记(乐器)只有当我做应用程序崩溃我已经使用MediaPlayer mp将媒体播放器设置在顶部(全局?); MediaPlayer mp2;等我在我的代码中使用它来检查是否正在播放音乐,停止播放,释放它,然后播放我想要的片段,

if(mp!=null&&mp.isPlaying()){
    mp.stop();
    mp.release();
}
if(mp2!=null&&mp2.isPlaying()){
    mp2.stop();
    mp2.release();
}
if(mp3!=null&&mp3.isPlaying()){
    mp3.stop();
    mp3.release();
}
mp3 = MediaPlayer.create(MusicActivity.this, R.raw.snaps);
mp3.setLooping(true);
mp3.start();

这又有效,但是从一个到另一个,然后又崩溃了应用程序。还有别的我应该做的吗?或只是一个内存不足的错误?

EDIT--  感谢ranjk89的帮助

更改为soundpool但他们不会停止ranjk89建议引用流ID而不是声音id寻找更多澄清,如果可能我有

farmback =0;
drumback =0; 

在顶部然后使用

加载oncreate
drumback = sp.load(this, R.raw.snaps,1);
farmback = sp.load(this, R.raw.oldmacdonaldbeta,1);

然后向下,用同样的方法我改变按钮图标,不一样的方法我改变我所有的其他声音为我的笔记打电话

  sp.stop(drumback);              
  sp.play(farmback, 1, 1, 0, -1, 1);

在一个和

sp.stop(farmback);              
  sp.play(drumback, 1, 1, 0, -1, 1);

在另一个,但总共有6种不同的乐器,所有都需要不同的背景音轨,当乐器改变时应该停止并播放与之相关的乐器,如

if (sp !=null && sp.isplaying()){
sp.stop();
sp.play(dumback);

}

但显然这是不可能的任何帮助赞赏

1 个答案:

答案 0 :(得分:0)

我最初的反应是,你不应该首先使用多个MediaPlayer

我建议您使用SoundPool,因为您最初可以加载所有媒体(音频),一旦它们全部加载,您可以随意播放它们。此外,您还没有多个玩家可以缩小代码的复杂程度。

但如果您确实想使用媒体播放器,

this。但请注意,一旦release,您将无法重用该MediaPlayer实例。即使您使用多个MediaPlayers,也不要在它们上面发布,除非您确定不再想要使用它们。使用stop()/ prepare()组合。

对于在主线程上做太多工作的应用程序,

如果您使用SoundPool或仅使用一个MediaPlayer并仍然遇到同样的问题,请使用AsyncTask。 Android开发者网站在此

上有一个非常好的tutorial