我希望这不是一个愚蠢的问题,因为我对Android很新,但我在使用MediaPlayer处理状态更改时遇到了麻烦。媒体播放器在屏幕上工作正常,并且在屏幕不可见时继续播放声音,但当我返回活动并尝试停止媒体播放器时,它将不会停止。无论如何我都没有看到从mp获取streamID,我可以在onPause和onResume上保存和恢复。必须有一些我想念的简单。以下是我到目前为止的一些片段:
public class Noise extends Activity {
public MediaPlayer mp;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layour.main);
Button startButton = (Button)findViewById(R.id.startButton);
Button stopButton = (Button)findViewById(R.id.stopButton);
mp = MediaPlayer.create(this, R.raw.noise);
startButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
playSoundLoop();
}
});
stopButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
stopSound();
}
});
}
public void playSoundLoop(){
mp.setLooping(true);
mp.start();
}
public void stopSound(){
mp.pause();
//Had originally tried mp.stop, mp.reset, mp.prepare, but that didn't work any better
}
}
答案 0 :(得分:2)
我认为你没有取消分配原始的MediaPlayer实例。因此,当您离开活动并返回时,再次调用onCreate()
,最后会有两个实例,直到内存压力导致旧的实例被释放。
简单的解决方案是在您的活动离开前景时释放它,例如:
@Override
onPause() {
mp.release();
super.onPause();
}
但是,如果您希望音乐继续在后台播放,则需要在活动生命周期之外的某处移动MediaPlayer参考 - 可能是在服务中。