私のアクティビティには次のものがあります。
private Set<MediaPlayer> mediaPlayers;
public void onSomeEventInMyActivity()
{
// play sound
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.my_sound);
mediaPlayers.add(mediaPlayer);
mediaPlayer.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
mp.release();
mediaPlayers.remove(mp);
}
});
mediaPlayer.start();
}
@Override
protected void onStart()
{
super.onStart();
mediaPlayers = new HashSet<MediaPlayer>();
}
@Override
protected void onStop()
{
super.onStop();
for (MediaPlayer mediaPlayer : mediaPlayers)
{
if (mediaPlayer.isPlaying())
{
mediaPlayer.stop();
}
mediaPlayer.release();
}
}
このコードは十分ですか、それとも MediaPlayer の漏洩につながりますか? onStop
との実装は必要ですか、それとも の呼び出しにonStart
頼ることができますか?release
onCompletion
onStop()
MediaPlayer の再生中に呼び出される可能性があるため、この方法でコードを作成しました。まだ呼び出されないrelease
ため、呼び出す必要があります。onCompletion
あくまでも推測なので間違っていたらごめんなさい。
onStop
また、メモリ不足の状況では呼び出されないことも読みました-その後どうすればよいですか?