android按两次返回退出程序

来源:互联网 发布:js获取复选框的值 编辑:程序博客网 时间:2024/05/16 14:48

今天给大家介绍两种按两次返回退出程序的方式

我先说第一种(我认为比较好理解的):

首先在在全局定义(public void onCreate方法之外)

boolean isExit = false;//设置一个全局变量的退出标识(意思是是否退出,值为false)Handler exitHandler = new Handler(){    @Override    public void handleMessage(Message msg) {//处理发送过来的消息        super.handleMessage(msg);        isExit = false;//重置值为false(等下后面会改变isExit的值)    }};

然后复写onKeyDown方法(也是在public void onCreate方法之外):

//(重点理解两个if)@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {//捕获按键动作发生的方法    if (keyCode == KeyEvent.KEYCODE_BACK){//判断是否按下的试返回键        if (isExit==false){            isExit = true;            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();            exitHandler.sendEmptyMessageDelayed(0,2000);//延迟2秒发送消息给handleMessage处理//亲们看好了,注意理解,第一次按下的时候就已经将isExit置为true了,到第二次在捕获到按下返回按钮的时候就是true了所以就不执行第二个if了直接reture了就退出了,如果你超过了两秒sxitHandler的延时消息已经发送出去了handleMessage方法又已经将isExit重置为false了所有又到了这段注释开头        }else{            finish();            System.exit(0);        }        return false;    }    return super.onKeyDown(keyCode, event);}

下面介绍第二种方法:

//退出时的时间private long mExitTime;//对返回键进行监听@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {        exit();        return true;    }    return super.onKeyDown(keyCode, event);}public void exit() {    if ((System.currentTimeMillis() - mExitTime) > 2000) {        Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();        mExitTime = System.currentTimeMillis();    } else {        finish();        System.exit(0);    }}