双击退出程序

先上效果图

这里写图片描述
双击返回键退出程序可是现在非常常用的功能了,但是我以前总是做不出来这个效果,看到网上有什么2种方法,或者3种方法退出程序,但是对于开发者来说把一种方法弄明白就好啦

所以下面是一种方法退出APP

首先来说说我的大体思路

1.返回键的响应事件
2.判断是第几次点击返回键
3.如果是第二次点击返回键,就要判断两次点击的时间间隔
4.如果是连续点击了两次返回键,退出程序

返回键的响应事件
这个方法是

 @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

就像按钮的点击事件一样,一旦返回键被点击就会触发这个方法(这个方法直接在Activity中调用)

看看源码是啥样的 点击

super.onBackPressed();

@Override
    public void onBackPressed() {
        if (!mFragments.getSupportFragmentManager().popBackStackImmediate()) {
            super.onBackPressed();
        }
    }

点击上面的 super.onBackPressed();

public void onBackPressed() {
        if (mActionBar != null && mActionBar.collapseActionView()) {
            return;
        }

        if (!mFragments.getFragmentManager().popBackStackImmediate()) {
            finishAfterTransition();
        }
    }

这个方法主要的作用是点击时候,将当前页面销毁

这样APP就会实现返回的效果

如果把

super.onBackPressed();

注释掉那个点击返回键就没有反映了 ,就不会被销毁了

判断第几次点击的返回键
声明变量 lats=-1
如果点击了返回键last的值就会改变(变成第一次点击返回键时的时间)

如果是第一次点击返回键,弹出请再点击一次退出的吐司,并得到第一次点击返回键的时间
如果不是第一次点击的返回键,就退出

如果是第二次点击返回键,判断两次返回键的间隔时间
用第一次返回键的时间减去第二次的时间

代码演示

//点击返回按钮,实现点击两次退出的效果
    //上一次点击的时间
    long last = -1;
    @Override
    public void onBackPressed() {
        //将父类方法点击一次就销毁界面的方法注释掉
        //super.onBackPressed();
        //获取当前点击的时间
        long now = System.currentTimeMillis();
        //第一次点击返回键则last=-1
        if (last == -1) {
            Toast.makeText(MainActivity.this, "请再点击一次退出界面", Toast.LENGTH_SHORT).show();
            //第一次的点击事件则就变成了上一次的点击时间
            last = now;
            //如果不是第一次点击
        } else {
            //判断两次点击的时间间隔
            //时间间隔正确
            if ((now - last) < 2000) {
                Toast.makeText(MainActivity.this, "已退出", Toast.LENGTH_SHORT).show();
                finish();
            } else {
                //如果时间间隔太长则第二次点击当做第一次处理
                last = now;
                Toast.makeText(MainActivity.this, "请再点击一次退出界面", Toast.LENGTH_SHORT).show();
            }

        }
    }

那么对于一个APP来说,要保证所有的Activity都被销毁(除了当前)
在调用finish();之后才会显示系统界面

最后是项目地址

https://github.com/XuDaHaoRen/QuitDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值