Android:如何保持对Media Player的引用?

时间:2011-01-30 16:37:12

标签: android

我正在构建一个使用Media Player类播放器播放的应用程序。

如果我使用后退按钮进入菜单,然后重新打开应用程序,音乐仍在播放,但如果我播放另一首曲目,该应用似乎会创建一个新的媒体播放器。我不能把引用保存的实例状态,因为它不可序列化。

保留参考的推荐技术是什么?

问候。

2 个答案:

答案 0 :(得分:2)

我建议您将MediaPlayer放在服务后面。我发现NPR Radio应用程序是开源的一个非常好的例子,说明如何做到这一点,以及绑定到该服务和播放媒体。您可以找到来源here

答案 1 :(得分:1)

查看Activity的生命周期图,确保在不释放旧的MediaPlayer对象的情况下不创建多个MediaPlayer对象。 http://developer.android.com/reference/android/app/Activity.html

您使用的是MediaPlayer.create()吗?这会分配一个新的MediaPlayer对象,但不对旧的对象做任何事情。在第二次调用create()之前调用release()。

playSound(){
  mp.release();
  mp = MediaPlayer.create();
  mp.start();
}

如果您手动管理,请尝试将来电置于这些地方。

    onCreate(){
      mp=new MediaPlayer();
    }
    onDestroy(){
      mp.release();
      wl.release();
    }
    playSound(){
      mp.reset();
      mp.setDatasource();
      mp.prepare();
      mp.start();
    }
    stopSound(){
     mp.reset();
    }

保持声音播放

onCreate(){
  PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
  wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "com.pzizz");
}
playSound(){    
  wl.acquire();
}
onDestroy(){
  wl.release();
}
stopSound(){
  wl.release();
}

将此添加到您的清单中以获取唤醒锁权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />