如何防止系统弹窗被多次调用

  在日常的开发中,我们经常会使用到 Dialog、PopupWindow、Toast 等,为了防止重复点击多次弹出,我们可以使用单例、或者定时器,配合 isShow() 的方法能很好的解决这个问题。

 那么系统的弹窗呢?比如 Intent 分享,我们没有弹窗打开关闭的回调,也不能做弹窗的单例,那我们要怎么解决这个问题呢?笔者介绍两种方式。

1. 使用定时器,设置开关

private boolean canShow = true;

private CountDownTimer showTimer = new CountDownTimer(500,500) {
        @Override
        public void onTick(long millisUntilFinished) {
            
        }

        @Override
        public void onFinish() {
            canShow = true;
        }
    };

private void showDialog(){

        if(!canShow){
            return;
        }

        // Intent 分享
        Intent intent = new Intent();
        ...
        canShow = false;
        showTimer.start();
    
}

我们可以写个定时器,点击分享后 0.5 s 之内点击无效,0.5 s 后放开开关,这样基本能够解决,那还有没有更好的解决办法呢?

2. 使用 Activity 的生命周期,设置开关

    我们知道,当 Activity 上面打开一个透明主题的 Activity 或者 DialogActivity 或者 Dialog 等,Activity 的 onPause() 会被调用,Dialog 消失时 onResume() 会被调用,所以我们可以通过 Activity 的生命周期开控制 Dialog 的展示。

private boolean canShow = true;

@Override
    protected void onResume() {
        super.onResume();
        canShow = true;
    }

    @Override
    protected void onPause() {
        super.onPause();
        canShow = false;
    }

private void showDialog(){

        if(!canShow){
            return;
        }

        // Intent 分享
        Intent intent = new Intent();
        ...
       
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值