我正在制作一个 Android 游戏应用程序,你从小鱼开始,你需要吃小鱼。每次你吃一条小鱼(靠着它们游泳),就会发出声音。这是播放声音的代码:
mp = MediaPlayer.create(GobbleFishGame.this, R.raw.bite);
if (!mPlaySound) {
return;
}
mp.start();
MPRelease();
这对最初的几条鱼很有效。但是在吃了一些鱼后(数量不同,但大约是 8-11 条鱼),游戏突然停止,我得到“Activity GobbleFish(在应用程序 GobbleFish 中)没有响应”。错误。我认为这与分配给 MediaPlayer 的资源过多有关,因此我创建了一个 sub 来释放 mp 的资源,然后创建一个新的 MediaPlayer mp(每次吃鱼时都会调用这个 sub)。这是子的代码:
private void MPRelease(){
MPReleaseCount += 1;
if(MPReleaseCount==5){
mp.release();
mp = new MediaPlayer();
//mp = MediaPlayer.create(GobbleFishGame.this, R.raw.bite);
//mp.reset();
MPReleaseCount=0;
}
}
当 MPReleaseCount 为 5 时,mp 被释放并重新创建(因此在吃掉 5 条鱼后)。我希望这会奏效,但事实并非如此。我仍然有一些鱼被吃掉后的问题(上次是 17 条鱼,所以 MPRelease 应该已经调用了 3 次),我得到“没有响应”错误,我必须强制关闭或等待。
谁能告诉我如何做到这一点来释放资源?因为我认为这就是问题所在。我真的无法判断这是否是问题所在,因为我在 Eclipse 中的 LogCat 中没有收到任何错误消息。由于“未响应”错误,在强制关闭应用程序后,我确实收到了此错误报告:
ANR in (my activity)
Reason: keyDispatchingTimedOut
提前致谢。