防止用户快速点击带来的问题

    写程序时候时常会有测试用奇奇怪怪的方法测出奇奇怪怪的问题,其中有一类很常见的是测试通过快速点击某一个按钮或者触发某一个操作导致程序崩了。其实这一类问题可以通过加入防快点的机制来避免,下文是我常用的一种防快点代码。

public class FastClickUtil {
    private static long lastClickTime = 0;//上次点击的时间
    private static int spaceTime = 500;//时间间隔
    private static FastClickUtil fcu;

    public static FastClickUtil getInstance() {
        if (null == fcu) {
            fcu = new FastClickUtil();
        }
        return fcu;
    }

    // 防止再次点击
    public boolean isFastClick() {
        long currentTime = System.currentTimeMillis();
        long time = currentTime - lastClickTime;
        if (time > 0 && time < spaceTime) {
            return true;
        }
        lastClickTime = currentTime;
        return false;
    }
}

    可以看到使用的方式很简单,一个静态的防快点工具,当用户第一次点击时候记录时间,第二次点击时候将两次点击时间作对比,如果小于预设的时间间隔(我这里设置的是半秒钟),则返回false,代表此次点击是快速点击,直接拦截此次操作。如果大于预设时间,则将这次的时间记住,并返回true。

    下面是在代码中使用的形式

btn.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           if (FastClickUtil.getInstance().isFastClick()) {// 防止用户快点
               return;
           }
           // todo 这里放后续操作
       }
});

 

点赞