Android应用中退出应用程序通常有两种做法,一种是使用选择对话框询问用户是否退出应用程序,另外一种是快速点击返回按钮两次然后退出应用。其中第二种实现方式较为普遍,而且我个人认为这种方式用户体验性要好点。下面,我介绍两种常用的点击两次返回退出应用的实现方式。
通过标识变量进行控制。首先定义一个布尔变量,赋初始值false。然后监听手机返回按钮,当点击返回按钮时,如果该布尔变量值为false,则把这个变量置为true;如果该变量为true,则退出程序。最后定义一个时间任务,2秒执行一次,如果布尔变量为true,则重置为false。这里定义一个循环周期为2秒的任务是为了达到快速点击两次的效果。
这样,在第一次点击返回按钮时,仅仅改变布尔值变量,而不会退出,第二次点击才会退出。如果用户点击了一次,那么2秒之后布尔变量又被重置为false,只有2秒内的两次点击才会退出程序。代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21private static Boolean isQuit = false;
private Timer timer = new Timer();
@Override
public void onBackPressed() {
if (isQuit == false) {
isQuit = true;
Toast.makeText(getBaseContext(), "再按一次返回键退出程序", Toast.LENGTH_SHORT).show();
TimerTask task = null;
task = new TimerTask() {
@Override
public void run() {
isQuit = false;
}
};
timer.schedule(task, 2000);
} else {
finish();
System.exit(0);
android.os.Process.killProcess(android.os.Process.myPid());
}
}通过两次点击返回按钮时的时间间隔进行判断。这种实现方式主要是用第二次点击返回按钮时的时间减去第一次点击的返回按钮时的时间,看这个时间差是否大于2秒,如果大于2秒则提示需要再点击一次才能退出,如果时间差小于等于2秒,则退出应用,实现代码如下:
1
2
3
4
5
6
7
8
9
10
11
12private long exitTime = 0;
@Override
public void onBackPressed() {
if(System.currentTimeMillis() - exitTime > 2000) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
android.os.Process.killProcess(android.os.Process.myPid());
}
}
我个人认为第二种实现方式更简单,更好理解,推荐使用这种实现方式。
原创文章,转载请出处注明。
下面是我的个人公众号,欢迎关注交流