按2次back键退出app

目前基本上大部分应用都有这种功能,点击返回键第一次会提示用户,如果在2S内点击了第二次才会退出。

方法一:通过使用handler的延迟操作2s实现目的
//是否退出的标记:默认false,不退出
    private boolean isExit = false;

    /**
     * 点击2次退出app
     *
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && !isExit) {//判断是否为返回键和是否退出
            //提示用户
            ToastUtils.showShort("再按一次返回键退出app");
            //设置标记
            isExit = true;

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    //延时2s之后将退出标记重置
                    isExit = false;
                }
            }, 2000);

            //返回true,将事件消费。
            return true;
        }
        //如果上述条件不成立,则会执行正常的返回操作。
        return super.onKeyDown(keyCode, event);
    } 

上面的代码也可以修改为:if条件OK时,handler发送一条延时2S消息,在handlerMessage里面设置条件继续满足。

方法二:通过判断2次back的时间差,判断是否退出

记录上次点击的时间,与本次点击的时间比较,当两次时间间隔小于一定值时,退出,否则提示“再按一次退出程序”,同时更新上次点击时间。

//上一次按back的时间
    private long lastBackTime = 0;

    /**
     * 点击2次退出app
     *
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK) {
            //当去点击back按键时候的时间
            long currentBackTime = System.currentTimeMillis();
            //当间隔大于2s的时候
            if (currentBackTime - lastBackTime > 2000) {
                ToastUtils.showShort("再按一次返回键退出app");
                //时间重新赋值
                lastBackTime = currentBackTime;
            } else {
                finish();
            }
            //将事件消费
            return true;
        }
        //如果上述条件不成立,则会执行正常的返回操作。
        return super.onKeyDown(keyCode, event);
    } 

你可能感兴趣的:(按2次back键退出app)