最讨厌QA提按钮快速点击的bug了

首先声明:本库的编写是被QA逼出来的。在开发过程中经常被QA提一类恶心的bug(快速点击控件出现多个页面或多个弹窗等)我司QA拿到包之后第一件事就爱测快速点击的场景,他们认为同一个按钮快速点击可能是误操作不应该得到响应。比如某个按钮点击之后应该弹出一个dialog,QA双击控件就出现2个dialog。这原本应该是个正常的场景,但是奈何抵不过他们一直提,所以就做了这个小功能加以限制。其实这就是个典型的AOP编程了。屏蔽快速点击最常见的操作是做一个工具类:这样就能解决90%问题。奈何我司QA测得又比较细,某天
摘要由CSDN通过智能技术生成

FilterFastClick

首先声明:本库的编写是被QA逼出来的。

在开发过程中经常被QA提一类恶心的bug(快速点击控件出现多个页面或多个弹窗等)

我司QA拿到包之后第一件事就爱测快速点击的场景,他们认为同一个按钮快速点击可能是误操作不应该得到响应。比如某个按钮点击之后应该弹出一个dialog,QA双击控件就出现2个dialog。这原本应该是个正常的场景,但是奈何抵不过他们一直提,所以就做了这个小功能加以限制。

其实这就是个典型的AOP编程了。

屏蔽快速点击最常见的操作是做一个工具类:

public class Utils{
    // 检测以避免重复多次点击
    private static long lastClickTime;

    public static boolean isFastDoubleClick() {
        long time = System.currentTimeMillis();
        long timeD = time - lastClickTime;
        if (0 < timeD && timeD < 500) {
            return true;
        }
        lastClickTime = time;
        return false;
    }
}

这样就能解决90%问题。

奈何我司QA测得又比较细,某天提了一个更让人心烦的问题:
某个页面上有多个按钮,点击button1的时候紧接着在500毫秒以内又点击了button2,这时候预期应该是button1和button2都应该得到响应。但是因为button1和button2的点击事件都加上了

if(Utils.isFastDoubleClick()){
    return;
}

的限制,由于全局都使用的同一个静态lastClickTime变量,就导致这两个控件之间的点击相互屏蔽了。如果是点击button1之后的500毫秒以内点击了button2将会导致button2点击事件中的Utils.isFastDoubleClick()这句代码为true而走了return。

那么解决的途径只能是不使用全局的lastClickTime这个变量来做上一次点击时间戳的判断,而是对每个控件都单独使用一个变量来记录。

那么最简单的做法就是实现一个自己的OnClickListener类,然后在每个控件设置点击事件的时候都使用这个类来屏蔽快速点击:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值