新手笔记:
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);
}