Android开发:Android 按2次back键程序才退出

2S内再次点击则退出

在我们使用的app中,会出现这种情况,按下back键app 没退出,弹出吐司“再按一次将退出”,然后我们按一次,app退出了,代码很简单。一是根据Boolean 类型的isExit的值判断是否退出
二是根据连续2次按下的时间间隔是否符合我们的条件,来退出。

方法一:boolean限制

protected boolean flag = false;
@Override
public void onBackPressed() {
    if (flag) {
        super.onBackPressed();
        System.exit(0);
    } else {
        Toast.makeText(MainActivity.this, "再点一次则退出App", Toast.LENGTH_SHORT).show();
        flag = true;
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                flag = false;
            }
        }, 2000);
    }
}
private boolean  isExit=false;//确保第一次按back不退出,因为不走if
@Override
public void onBackPressed() {
    if (isExit) {
        finish();//关闭activity
        System.exit(0);//程序退出
    } else {
        Toast.makeText(getApplicationContext(), "再按一次将退出", Toast.LENGTH_LONG).show();
        isExit=true;//值改为true,确保第二次按走if退出
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                isExit=false;//2s后将值重新改成false,确保2次按下的事件在2分钟内.也可以用handler将值改为false
            }
        }, 2000);
    }
}

方法二:判断时间间隔<2000毫秒,退出app

long exitTime=0;
@Override
public void onBackPressed() {
    if (System.currentTimeMillis()-exitTime>2000) {
        Toast.makeText(getApplicationContext(), "再按一次将退出", Toast.LENGTH_LONG).show();
        exitTime=System.currentTimeMillis();
    } else {
        finish();
        System.exit(0);
    }
}


    @Override
    public void onBackPressed() {
    if (System.currentTimeMillis() - time < 2000) {
        super.onBackPressed();
    } else {
        showToast("再点击一次退出哦!");
        time = System.currentTimeMillis();
    }
    }

按钮禁止连续点击

long oldTime = 0;
btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        long clickTime = System.currentTimeMillis();
        if (clickTime - oldTime > 2000) {
            ToastUtil.showShortToast(MainActivity.this, "再按一次则退出app");
        } else {
            ToastUtil.showShortToast(MainActivity.this, "退出App");
        }
        oldTime = clickTime;
    }
});

给所有的按钮统一添加

public class CustomOnClickListener implements View.OnClickListener {

    public CustomOnClickListener(TimeLimitClickListener listener) {
        this.listener = listener;
    }

    long oldTime = 0;

    @Override
    public void onClick(View v) {
        long clickTime = System.currentTimeMillis();
        if (clickTime - oldTime < 2000) {
            Toast.makeText(v.getContext(), "2s禁止连续点击", Toast.LENGTH_SHORT).show();
        } else {
            setListener(listener);
        }
        oldTime = clickTime;
    }

    interface TimeLimitClickListener {
        void xianZhi2s();
    }

    private TimeLimitClickListener listener;

    private void setListener(TimeLimitClickListener listener) {
        listener.xianZhi2s();
    }
}

使用:

btn1.setOnClickListener(new CustomOnClickListener(new CustomOnClickListener.TimeLimitClickListener() {
    @Override
    public void xianZhi2s() {

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值