My “再按一次后退键退出应用”
其实你去网上搜这个标题一大堆的帖子,千篇一律的转自同一个人的帖子!
?
以后大家转帖子先实践一下好不好!
?
网上那个达不到预期效果,第一下正常提示, 如果两秒内再点 就退出 过了两秒点还是会正常提示
?
但是第三次一定会退出。
?
下面是网上疯传的代码:
?
?
private
?static
?Boolean isExit =?
false
;
????
private
?static
?Boolean hasTask =?
false
;
????
Timer tExit =?
new
?Timer();
????
TimerTask task =?
new
?TimerTask() {
? ? ?
?????????
@Override
????????
public
?void
?run() {
????????????
isExit =?
false
;
????????????
hasTask =?
true
;
????????
}
????
};
????
?????
@Override
????
public
?boolean
?onKeyDown(
int
?keyCode, KeyEvent event) {
????????
System.out.println(
"TabHost_Index.java onKeyDown"
);
????????
if
?(keyCode == KeyEvent.KEYCODE_BACK) {
????????????
if
(isExit ==?
false
?) {
????????????????
isExit =?
true
;
????????????????
Toast.makeText(
this
,?
"再按一次后退键退出应用程序"
, Toast.LENGTH_SHORT).show();
????????????????
if
(!hasTask) {
????????????????????
tExit.schedule(task,?
2000
);
????????????????
}
????????????
}?
else
?{
????????????????
finish();
????????????????
System.exit(
0
);
????????????
}
????????
}
????????
return
?false
;
?
????
}
?
?
里面的hasTask自从第一次timer后变true后 第二次就是只是显示toast了 不会去修改isExist变量了
?
这样第三次会直接进入到else里面finish程序。
?
如果不要hasTask会在第二次 点的时候说timer有任务了 而崩溃
?
但是如果每次都新建一个timer就可以解决这个问题
?
一下是我的代码,有错请指出:
?
?
private Boolean isPressedBack = false;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isPressedBack == false) {
isPressedBack = true;
Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show();
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
isPressedBack = false;
}
};
timer.schedule(task, 2000);
} else {
ActivityFileManager.this.finish();
}
}
return false;
}