双击退出程序

来源:互联网 发布:angular4 node sass 编辑:程序博客网 时间:2024/06/13 13:51

先上效果图

这里写图片描述
双击返回键退出程序可是现在非常常用的功能了,但是我以前总是做不出来这个效果,看到网上有什么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

原创粉丝点击