经常用到app中手指一不小心点了返回键就退出了应用,用户体验不太好,万一用户不是想退出应用呢?所以这个时候提议在用户第一次点击返回键的时候,提示用户您确定要退出应用吗?这里就简单的处理一下这个逻辑,也就是在用户第一次点击返回键的时候,记录当前时间的毫秒值,第二次点击返回键的时候在获取一下当前时间的毫秒值,然后设定一个固定的时间差作为评判标准,如果两次的时间差大于我们规定的时间差,就认为第一次点击无效,再次提示用户您确定要退出应用吗?如果两次点击的时间差小于我们固定的时间差,就退出应用。下面是代码:
private boolean isPressedBackOnce = false;
private long firstPressedTime = 0;
private long secondPressedTime = 0;
@Override
public void onBackPressed() {
if (isPressedBackOnce) {
// 说明已经按了一次 这是第二次
secondPressedTime = System.currentTimeMillis();
if (secondPressedTime - firstPressedTime > 2000) {
// 第一次点击作废了,重新计算
Toast.makeText(this, "再点一次退出", 0).show();
isPressedBackOnce = true;
firstPressedTime = System.currentTimeMillis();
} else {
// 说明两秒之内点击的第二次
finish();
// 状态回复至初
isPressedBackOnce = false;
firstPressedTime = 0;
secondPressedTime = 0;
}
} else {
// 说明第一次
Toast.makeText(this, "再点一次退出", 0).show();
isPressedBackOnce = true;
firstPressedTime = System.currentTimeMillis();
}
}
上面只是简单的写了一个双击退出的逻辑,在这里也可以添加一个ActivityManger类,管理整个进程的Activity,在退出的时候,遍历关闭所有的界面。在上面调用finish的时候调用ActivityManger.killAll();就可以退出所有的activity。
public static class ActivityManger {
private static Stack<Activity> activities = new Stack<>();
//事先写好一个基类,所有的activity都继承这个基类,在基类中调用该方法
public static void add(Activity activity) {
activities.add(activity);
}
//在某个activity中调用此方法,可以删除自己
public static void remove(Activity activity) {
activities.remove(activity);
}
//清空存放activity的集合
public static void clear() {
activities.clear();
}
//在退出应用的时候遍历关闭所有的activity
public static void killAll() {
for (Activity activity : activities) {
activity.finish();
}
}
}
有兴趣的还可以添加一个结束动画之类的,我就不写了.
private boolean isPressedBackOnce = false;
private long firstPressedTime = 0;
private long secondPressedTime = 0;
@Override
public void onBackPressed() {
if (isPressedBackOnce) {
// 说明已经按了一次 这是第二次
secondPressedTime = System.currentTimeMillis();
if (secondPressedTime - firstPressedTime > 2000) {
// 第一次点击作废了,重新计算
Toast.makeText(this, "再点一次退出", 0).show();
isPressedBackOnce = true;
firstPressedTime = System.currentTimeMillis();
} else {
// 说明两秒之内点击的第二次
finish();
// 状态回复至初
isPressedBackOnce = false;
firstPressedTime = 0;
secondPressedTime = 0;
}
} else {
// 说明第一次
Toast.makeText(this, "再点一次退出", 0).show();
isPressedBackOnce = true;
firstPressedTime = System.currentTimeMillis();
}
}
上面只是简单的写了一个双击退出的逻辑,在这里也可以添加一个ActivityManger类,管理整个进程的Activity,在退出的时候,遍历关闭所有的界面。在上面调用finish的时候调用ActivityManger.killAll();就可以退出所有的activity。
public static class ActivityManger {
private static Stack<Activity> activities = new Stack<>();
//事先写好一个基类,所有的activity都继承这个基类,在基类中调用该方法
public static void add(Activity activity) {
activities.add(activity);
}
//在某个activity中调用此方法,可以删除自己
public static void remove(Activity activity) {
activities.remove(activity);
}
//清空存放activity的集合
public static void clear() {
activities.clear();
}
//在退出应用的时候遍历关闭所有的activity
public static void killAll() {
for (Activity activity : activities) {
activity.finish();
}
}
}
有兴趣的还可以添加一个结束动画之类的,我就不写了.