2

我希望这不是一个愚蠢的问题,因为我对 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
     }

}

4

1 回答 1

2

我不认为您正在释放原始 MediaPlayer 实例。因此,当您离开活动并返回时,onCreate()会再次调用它,您最终会得到两个实例,直到内存压力导致旧的实例被释放。

简单的解决方案是在您的活动离开前台时释放它,例如:

@Override
    onPause() {
    mp.release();
    super.onPause();
}

但是,如果您希望音乐继续在后台播放,则需要将 MediaPlayer 引用移动到 Activity 生命周期之外的某个位置 - 可能会移动到服务中。

于 2011-06-16T15:38:24.550 回答