私は、小さな魚として開始し、小さな魚を食べる必要がある Android ゲームアプリを作成しています。小さな魚を(泳いで)食べるたびに、音が鳴ります。これは、サウンドを再生するためのコードです。
mp = MediaPlayer.create(GobbleFishGame.this, R.raw.bite);
if (!mPlaySound) {
return;
}
mp.start();
MPRelease();
これは、最初の数匹の魚に適しています。しかし、いくつかの魚を食べた後 (量はさまざまですが、約 8 ~ 11 匹の魚です)、ゲームが突然停止し、「Activity GobbleFish (アプリケーションの GobbleFish) が応答していません」というメッセージが表示されます。エラー。MediaPlayer に割り当てられているリソースが多すぎることに関係していると思われるため、mp のリソースを解放するサブを作成し、新しい MediaPlayer mp を作成しました (このサブは、魚が食べられるたびに呼び出されます)。これはサブのコードです:
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
前もって感謝します。