我有一个媒体播放器,可以从主(启动器(活动开始播放音乐。我偶然发现了两个问题。
-
当我按下主页按钮或我的应用程序通常失去焦点时,音乐仍在播放。
-
当我返回到主(启动器(活动时,媒体播放器再次启动(创建新的媒体播放器(,结果是有两个媒体播放器同时播放同一个文件。
*对于第一个问题,我试图以onStop()
方法停止音乐,但是当我从主要活动转到其他活动时,音乐停止了,这是我不想要的,onDestroy
不起作用。
我的代码:
if (player == null) {
player = MediaPlayer.create(this, R.raw.music);
player.setLooping(true);
if (!player.isPlaying()) {
player.start();
}
}
P.S我希望音乐不仅在主要活动中播放,而且在其他活动中播放。
当您退出时,您的MediaPlayer
未被正确停止。 每当活动停止时,都会调用onStop()
,以便进入更高优先级的活动,或者被另一个活动"暂停"(在此处检查活动生命周期(。在您的onDestroy()
方法中尝试此答案中的stopPlaying()
方法。
对于第二个问题,您可以遵循以下两种方法之一:要么坚持使用我上面给你的答案中的stopPlaying()
方法,停止MediaPlayer
并将其设置为 null,要么在活动开始时检查MediaPlayer
是否存在(尝试在MediaPlayer
实例化之前检查这一点,否则MediaPlayer
将始终存在(。
确保通过调用 player.release(( 并在 onDestroy(( 方法中取消 MediaPlayer 来释放您在销毁活动时创建的 MediaPlayer 资源。
@Override
protected void onPause() {
super.onPause();
if(player != null)
player.stop();
}
@Override
protected void onStop() {
super.onStop();
if(player != null)
player.stop();
}
@Override
protected void onDestroy() {
super.onDestroy();
if(player != null)
player.stop();
}