一般一个应用程序要执行退出的命令是单击回退双击退出
比如就像这样,在要退出的页面加入退出的代码。
private static Boolean isExit = false;
/*单击回退*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
exitBy2Click();
return false;
}
return super.onKeyDown(keyCode, event);
}
/*双击退出*/
private void exitBy2Click() {
Timer tExit = null;
if (isExit == false) {
isExit = true; // 准备退出
showLongToast(this, "再按一次退出程序");
tExit = new Timer();
tExit.schedule(new TimerTask() {
@Override
public void run() {
isExit = false; // 取消退出
}
}, 2000); // 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务
} else {
finishAll();
try {
ActivityManager activityMgr = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.killBackgroundProcesses(this.getPackageName());
}catch (SecurityException e) {
Log.i("Exception-Security", e.getMessage());
}
System.exit(0);
}
}
但是会有一个问题,比如我要在MainActivity中退出,但是之前还有个登录页。
单击的时候不就返回到登录页了吗?
这样显然是不合理的,
最简单的办法是在登录页面加入
当activity启动的时候,移除上一个活动栈,这样在执行回退命令的时候,由于找不到返回的栈,所以就默认当前的活动是第一个。
<!--登陆-->
<activity android:name=".activity.LoginActivity"
android:noHistory="true">
</activity>
在app中所有的活动栈都是以数组的形式存在,而finish执行的方法就是返回到上一个栈的索引。
所以在监听回退键的时候要注意这一点。