【发布时间】:2012-11-27 08:20:53
【问题描述】:
在我的活动中,我有以下内容:
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 的实现是必要的,还是我可以仅仅依靠在onCompletion 中调用release?
我这样编写代码是因为我假设可以在 MediaPlayer 播放时调用onStop(),所以我需要调用release,因为还不会调用onCompletion。我只是猜测这是对的,如果我错了,请纠正我。
我还读到onStop 在内存不足的情况下不会被调用 - 那该怎么办?
【问题讨论】:
标签: android media-player android-activity android-mediaplayer activity-lifecycle