Android完全退出APP,并且清除活动栈

一般一个应用程序要执行退出的命令是单击回退双击退出

比如就像这样,在要退出的页面加入退出的代码。


    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执行的方法就是返回到上一个栈的索引。
所以在监听回退键的时候要注意这一点。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值