先上效果图
双击返回键退出程序可是现在非常常用的功能了,但是我以前总是做不出来这个效果,看到网上有什么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();之后才会显示系统界面
最后是项目地址