android按两次返回退出程序

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

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

首先在在全局定义(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)
@Override
public 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了直接执行eles{}中的方法就finish()关掉了,如果你超过了两秒sxitHandler的延时消息已经发送出去了
handleMessage方法又已经将isExit重置为false了所有又到了这段注释开头

        }else{
            finish();
            System.exit(0);
        }
        return false;
    }
    return super.onKeyDown(keyCode, event);
}

下面介绍第二种方法:

//退出时的时间
private long mExitTime;
//对返回键进行监听
@Override
public 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);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值