Android 音乐播放器 按系统返回键退出后,重新打开,两种声音的问题

本文探讨了一款音乐播放器程序中遇到的问题:按下返回键导致正在播放的歌曲未停止,再次进入应用时能同时播放另一首歌。文章提供了两种解决方案:一是通过重写onKeyDown方法强制杀死进程;二是重写onBackPressed方法使程序置于后台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新手笔记:

Ps:这个问题的解决,基于我的音乐播放器程序,路过的朋友仅供参考。

造成这个问题的原因,按下Back键时,系统默认调用程序栈中最上层Activity的Destroy()方法来销毁当前的Activity。当已经播放着的歌是在另一个线程工作,所以没有被Kill掉。当我们重新进这个App(当前Activity)时 ,会重新调用OnCreate()方法进行,我的MediaPlayer对象是在OnCreate里被重新创建了,故可以同时播放另一首歌。

方案1、暂时解决:重写该activity的onKeyDown方法,当按下系统返回键时,调用android.os.Process.killProcess(android.os.Process.myPid());Kill掉当前的进程。

	@Override         
	public boolean onKeyDown(int keyCode,KeyEvent event){
		if (keyCode == KeyEvent.KEYCODE_BACK){
			android.os.Process.killProcess(android.os.Process.myPid());
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}	

一些杀进程方法的区别:

finish():结束当前Activity,不会立即释放内存。遵循android内存管理机制。
exit():结束当前组件如Activity,并立即释放当前Activity所占资源。
killProcess():结束当前组件如Activity,并立即释放当前Activity所占资源。
restartPackage():结束整个App,包括service等其它Activity组件。


上面那种方法无异于因噎废食,不过也不排除有同学就是需要这样的需求的,还有下面这种方法。

方案2、:重写onBackPressed()的方法,按下返回键时,将程序置于后台,效果与Home键相同。back键默认把当前Activity给finish,home键只是把Activity给onStop.

	@Override
	public void onBackPressed() {
        Intent setIntent = new Intent(Intent.ACTION_MAIN);
        setIntent.addCategory(Intent.CATEGORY_HOME);
        setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent);
    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值