在我的活动中,我有以下内容:
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
在内存不足的情况下不调用的内容-那该怎么办?