双击提示退出程序的实现与分析

去年年底在学android写demo的时候,又一次想要学着写一次双击退出的逻辑,但是当时看到好几十行的代码和逻辑当场就怂了,不过最近在做项目的时候,突然想到这个逻辑,就想着找来看看,然后发现还是相当简单的~~~啦啦啦~~~


很容易想到这里需要一个定时器,来为我们开启一个异步计时的任务:

   @Override
    public void onBackPressed() {
        exitBy2Click();
    }

    private void exitBy2Click() {
        Timer tExit= null;//计时器定义,建议将该变量写入活动的成员变量中,避免了栈内存的浪费;在这里置空可以达到释放堆内存的效果,防止OOM
        if (!isExit){//为假,初始化计时器开始计时,为真表示延时任务未被执行,而进入了else
            isExit= true;//开始计时的标识
            Toast.makeText(this, "再按一次退出程序",Toast.LENGTH_SHORT).show();
            tExit= new Timer();

            tExit.schedule(new TimerTask() {//计划一个延时任务
                @Override
                public void run() {//该任务被执行,则表示两秒之内没有再次触发onBackPressed方法,isExit标记被重置为假。本次为时2s的倒计时结束
                    isExit= false;
                }
            },2000);//两秒之后执行run里的代码块,结束本次对第二次连击的监听(异步执行计时任务,也可以理解为对子线程的一个sleep)
        }else {
            finish();
            System.exit(0);//鉴于活动栈里没有活动了,可暂时不使用这段强制退出代码,不过还是建议使用
        }
    }

其中的exitBy2Click 是我们的核心代码~~~其实核心也就是一个延时任务+标记量

具体的逻辑在注释里已经详细说明了,同样对返回键的监听我们也可以使用onKeyDown来监听具体的按键事件......

  @Override//监听返回键
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode== KeyEvent.KEYCODE_BACK){
            exitBy2Click();
        }
        return false;
    }


当然啦,核心逻辑的实现也可以使用Handler的postdelayed来实现,其中的Handler对象的作用等同于Timer对象,所以我只贴出一个简单demo,留下的由博友们自行脑补吧

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

            }
        },2000);


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值