如何实现应用最小化或熄屏时停止MediaPlayer播放音乐
问题描述
在Android应用中实现了音乐播放控制,但应用最小化或熄屏时音乐仍持续播放,需要添加代码实现此时自动停止音乐。
现有实现代码
button4 = findViewById(R.id.button4); musicSound = MediaPlayer.create(this, R.raw.music); buttonClick(); } private Button button4; private MediaPlayer musicSound; public void buttonClick() { button4.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { soundPlay(musicSound); } } ); } public void soundPlay(MediaPlayer sound) { sound.start(); sound.setLooping(true); } buttonMusicStop = findViewById(R.id.buttonMusStop); buttonClick2(); } private ImageButton buttonMusicStop; public void buttonClick2() { buttonMusicStop.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { soundPlay2(musicSound); }}); } public void soundPlay2(MediaPlayer sound) { if (sound.isPlaying()) { sound.pause(); } else { sound.start(); sound.setLooping(true); } }
解决方案
利用Android Activity的生命周期回调方法,在应用进入后台(最小化)或熄屏时触发音乐停止操作,同时在Activity销毁时释放资源:
1. 添加后台停止逻辑
在你的Activity类中重写onPause()方法,当应用失去焦点(包括熄屏、最小化)时暂停或停止音乐:
@Override protected void onPause() { super.onPause(); if (musicSound != null && musicSound.isPlaying()) { // 暂停音乐,后续回到应用可直接start恢复 musicSound.pause(); // 若需彻底停止而非暂停,可替换为 musicSound.stop(); 但停止后需重新prepare才能播放 } }
2. 添加资源释放逻辑
重写onDestroy()方法,释放MediaPlayer资源避免内存泄漏:
@Override protected void onDestroy() { super.onDestroy(); if (musicSound != null) { musicSound.release(); musicSound = null; } }
逻辑说明
onPause()会在应用最小化、熄屏、跳转到其他Activity时触发,能及时拦截音乐播放;- 选择
pause()而非stop()是因为暂停后无需重新初始化MediaPlayer即可恢复播放,体验更流畅; - 必须在
onDestroy()中释放MediaPlayer,否则会占用系统资源导致内存泄漏。
内容的提问来源于stack exchange,提问作者Oganes
相关产品推荐
相关产品推荐

