监听back按键,再次点击退出应用

来源:互联网 发布:销售软件 编辑:程序博客网 时间:2024/05/21 14:06

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);    }
0 0