2017-06-19补充
要实现双击返回键退出应用,目前有两种方法,一种是重写onKeyDown()方法,一种是重写onBackPressed()方法,两种方法都比较清晰明了,两种方法使用的接口不同。
第一种方法重写onKeyDown()方法
参考博文:http://blog.csdn.net/encienqi/article/details/7855322
实现连续点击返回键时,我们要重写Activity的onKeyDown方法,以捕捉到按键的点击事件,然后我们应该实现连续点击返回键的效果,在第一次点击的时候出现“再次点击返回键退出”的提示,实现代码如下:
private static boolean isExit=false;
Timer timer=new Timer();
TimerTask newTask =null;
@Override
public boolean onKeyDown(int keycode, KeyEvent event){
if(keycode==KeyEvent.KEYCODE_BACK){
if(!isExit){
Toast.makeText(this, "再按一次返回键退出", Toast.LENGTH_SHORT).show();
isExit=true;
if(newTask!=null){
try {
newTask.cancel();
} catch (Exception e) {
// TODO: handle exception
System.out.println("任务取消失败");
}
}
newTask=new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
isExit=false;
}
};
timer.schedule(newTask, 2000);
}else{
finish();
System.exit(0); }
}
return false;
}
将上述代码添加到主Activity的后面即可。
值得注意的是TimerTask取消并移除,如果没有上面那一步,在你第一次点击返回键而没有在两秒内点击第二次,当你再点击返回键时会报错。
demo代码:
第二种方法重写onBackPressed方法
代码示例如下:
private static final int EXIT_TIME = 2000;// 两次按返回键的间隔判断
private long firstExitTime = 0L;// 用来保存第一次按返回键的时间
/**
* 双击返回键退出
*/
@Override
public void onBackPressed(){
long curTime=System.currentTimeMillis();//获取当前的系统时间--毫秒
if (curTime-firstExitTime<EXIT_TIME){
//两次返回键的时间小于2s就退出应用
finish();
}else {
Toast.makeText(this,"再按一次返回键退出",Toast.LENGTH_SHORT).show();
firstExitTime=curTime;
}
}