Android:如果我继续按下后退按钮并重新启动应用程序,Mediaplayer会多次播放

问题描述:

当我播放我的歌曲并按返回按钮返回到主页时,音乐会继续播放。当我再次启动应用程序时,音乐播放两次。我认为这是onResume方法,因为我注释掉了方法并且问题停止了。我如何才能让ResResume正常工作?我尝试在onResume中使用if(backgroundMusic.isplaying()),但是当我从其他活动恢复时,应用程序崩溃。我究竟做错了什么?Android:如果我继续按下后退按钮并重新启动应用程序,Mediaplayer会多次播放

//global mediaplayer 
MediaPlayer backgroundMusic; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    loadBackgroundMusic(); 

} 

private void loadBackgroundMusic() { 

    //load mp3 into object and start it 
    backgroundMusic = MediaPlayer.create(this,R.raw.backgrounmusic); 
    backgroundMusic.setLooping(true); 
    backgroundMusic.start(); 

} 
     @Override 
     protected void onPause() { 
      super.onPause(); 
      backgroundMusic.release(); 

     } 

     @Override 
     protected void onResume() { 
      super.onResume(); 
      loadBackgroundMusic(); 

     } 

     @Override 
     protected void onStop() { 
      super.onStop(); 
      backgroundMusic.release(); 
     } 
+0

你能描述一下你想要的行为吗? – tidbeck 2012-02-23 22:49:44

+0

我希望活动在我恢复活动时播放音乐。 – iamarnold 2012-02-24 07:19:32

我不确定你想要的行为。在我看来,这是一个二:只有当我的活动是可见的

如果是这样的话,你应该寻找Activity Lifecycle文档仔细

  1. 音乐应播放。例如,这会告诉你onResume()也会在第一次创建活动时被调用。

    所以解决方法是在onResume()开始音乐并在onPause()或类似的地方停止。

  2. 一次开始我的活动结束后,音乐应该是,即使我回到主屏幕

    在这种情况下,你真的想要一个Service播放。

+0

我的问题是我在onResume()中放入什么,以便在从onPause()返回时播放音乐。目前我调用了loadBackgroundMusic(),它加载了mp3并再次播放。通过这样做,每当我按下后退按钮返回主页并重新启动应用程序时,音乐播放两次。 – iamarnold 2012-02-24 16:04:59

+0

@iamarnold从'onCreate()'中移除'loadBackgroundMusic()',并在'onPause()'的'backgroundMusic.release()'前加'backgroundMusic.stop()'。 – tidbeck 2012-02-24 16:19:22

+0

@iamarnold是否解决了您的问题? – tidbeck 2012-02-27 09:38:19