我正在构建一个使用Media Player类播放器播放的应用程序。
如果我使用后退按钮进入菜单,然后重新打开应用程序,音乐仍在播放,但如果我播放另一首曲目,该应用似乎会创建一个新的媒体播放器。我不能把引用保存的实例状态,因为它不可序列化。
保留参考的推荐技术是什么?
问候。
答案 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" />