Android连续点击两次返回键退出程序的三种实现方法

一 主流的方法,重写onKeyDown(int keyCode, KeyEvent event),当按键为KeyEvent.KEYCODE_BACK(返回键)时,判断isExit的值,当为首次点击时,执行自定义方法,第二次点击执行父类方法,退出程序.


                private boolean isExit;

                                @Override
                                public boolean onKeyDown(int keyCode, KeyEvent event) {

                                                if (keyCode == KeyEvent.KEYCODE_BACK) {
                                                                handle();
                                                                return false;
                                                }else{
                                                                return super.onKeyDown(keyCode, event);
                                                }

                                }

                                private void handle() {
                               
                                                Timer timer = new Timer();

                                                if (!isExit) {
                                                                isExit = true;
                                                                //第二次点击,用到了TimerTask
                                                                Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
                                                                timer.schedule(new TimerTask() {
                                                                                @Override
                                                                                public void run() {
                                                                                                isExit = false;
                                                                                }
                                                                }, 2000);
                                                } else {
                                                                Log.i(TAG, "exit()");
                                                                finish();
                                                                System.exit(0);
                                                }

                                }

二 第二种要稍微巧妙一点,代码也精简一点,直接重写onBackPressed(),在方法内部实现全部功能.

                @Override
                public void onBackPressed() {
                                if (isExit) {
                                                super.onBackPressed();
                                                return;
                                }

                                this.isExit = true;
                                Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

                                new Handler().postDelayed(new Runnable() {

                                                @Override
                                                public void run() {
                                                                isExit=false;
                                                }
                                }, 2000);
                }

三 重写onBackPressed(),利用系统时间巧妙判断

        @Override
    public void onBackPressed()
    {
        if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis())
        {
            super.onBackPressed();
            return;
        }
        else {
            Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show();
        }

        mBackPressed = System.currentTimeMillis();
    }

转载于:https://my.oschina.net/u/2304841/blog/475504

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值