Android中的“再按一次返回键退出程序”的改进

最近在优化公司项目的代码,发现以前的坑很多,我慢慢地在填,今天就发现了一个坑,就是首页的“再按一次返回键退出程序“功能,所以这个坑,我就填了。

首先,项目里的版本代码是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private static boolean isExit = false;
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
isExit = false;
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit();
return false;
}
return super.onKeyDown(keyCode, event);
}
private void exit() {
if (!isExit) {
isExit = true;
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mHandler.sendEmptyMessageDelayed(0, 2000);
} else {
finish();
System.exit(0);
}
}

这是一种很扯淡的写法,而且用handler有内存泄漏的风险,而且代码也不精简,所以我就填了这个坑。

经过修改直接写个简洁版的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}

经过修改后,代码精简易懂。

坚持原创技术分享,您的支持将鼓励我继续创作!