1、使用handler的延时发送Message机制,达到”再次点击退出“ 效果
sendEmptyMessageDelayed(int,int);
参一: 需要传递的值 ; 参二:延迟多少毫秒发送
handler 为全局属性
// 标记是否连续点击 back
boolean isContinuous = false;
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
isContinuous = false;
}
};
该方法中判断是否退出应用
public void exitApp(){
if(isContinuous){
finish();
}else {
isContinuous = true;//设置连续点击标记为true
Toast.makeText(this,"再按一次退出程序",Toast.LENGTH_LONG).show();
//如果两次点击之间间隔超过2000毫秒,则会发送message,在handler中重新对标记设置为false
**mHandler.sendEmptyMessageDelayed(0,2000);**
}
}
在Activity重写onKeyDown()方法,在onKeyDown()中调用 exitApp()方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode== KeyEvent.KEYCODE_BACK){
exitApp();
return true;
}
return super.onKeyDown(keyCode, event);
}
2、利用System.currentTimeMillis() 对比。 根据 现在点击back时的时间 与 之前点击back时的时间 的差值 判断是否大于预设值。
long firtstTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode== KeyEvent.KEYCODE_BACK){
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 2000) { //如果两次按键时间间隔大于2秒,则不退出
Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
firstTime = secondTime;//更新firstTime
return true;
} else { //两次按键小于2秒时,退出应用
System.exit(0);
}
}
return super.onKeyDown(keyCode, event);
}