这里给出的,只是另一种实现思路。网上也看到其他方式,原理都是延时判断。
网上已经有了其他方式,个人感觉,onKeyDown里面,尽量减少操作,便有了下面的实现思路。
使用Handler进行实现,在onKeyDown里面只需要发送一条消息,其他操作全交给handleMessage去处理就ok。
首先,定义Handler及事件和等待时长:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
private
static
final
int
MSG_EXIT =
1
;
private
static
final
int
MSG_EXIT_WAIT =
2
;
private
static
final
long
EXIT_DELAY_TIME =
2000
;
private
Handler mHandle =
new
Handler() {
public
void
handleMessage(Message msg) {
switch
(msg.what) {
case
MSG_EXIT:
if
(mHandle.hasMessages(MSG_EXIT_WAIT)) {
finish();
}
else
{
Toast.makeText(MainActivity.
this
,
"再按一次返回键退出"
, Toast.LENGTH_SHORT).show();
mHandle.sendEmptyMessageDelayed(MSG_EXIT_WAIT, EXIT_DELAY_TIME);
}
break
;
case
MSG_EXIT_WAIT:
break
;
}
}
};
|
其次,重载onKeyDown:
1
2
3
4
5
6
7
8
|
@Override
public
boolean
onKeyDown(
int
keyCode, KeyEvent event) {
if
(KeyEvent.KEYCODE_BACK == keyCode) {
mHandle.sendEmptyMessage(MSG_EXIT);
return
true
;
}
return
super
.onKeyDown(keyCode, event);
}
|