按钮防抖(防止重复点击)
来源:互联网 发布:cf36 2检测到数据异常 编辑:程序博客网 时间:2024/06/04 18:17
写在前面
在日常开发中我们时长会遇到这样的问题,当用户点击某个按钮时触发一个http请求,从后端查询一些数据,或者做一些操作,而当用户无意或有意快速重复的点击按钮时,导致的后果就是重复的http请求或者完全没有重复必要的一些操作,毕竟站在程序的角度来考虑问题,这些操作是消耗cpu时间,消耗内存又完全没有必要的,甚至会造成程序的卡顿,所以我们就需要一种策略去防止这种情况的发生了,并且这个过滤最好是针对按钮进行处理,从根源防止问题的发生。
ok,废话不多说,我的基本思路就是使用一个队列去记录按钮的上次点击时间,当有新的按钮被点击时,判断按钮是否已在队列中,如果不在则移除队头按钮id,在队尾添加新的按钮id,若存在则判断当前点击时间和上次点击时间间隔,判断是否可点击,并且更新点击时间。
核心代码
public boolean checkClick(int clickId) { long currentClickTime = System.currentTimeMillis(); long lastClickTime = 0; boolean canClick = false; ClickInner remove = null; if (!isEmpty()) { for (ClickInner c : clickList) { if (c.getClickId() == clickId) { lastClickTime = c.getLast(); c.setCurrent(currentClickTime); if (c.canClick()) canClick = true; remove = c; break; } } ClickInner click = new ClickInner(clickId); click.setCurrent(currentClickTime); if (remove != null) { clickList.remove(remove); if (!canClick) click.setLast(lastClickTime); push(click); } else { //队列中无Element if (isFull()) { clickList.get(0).setCurrent(currentClickTime); if (clickList.get(0).canClick()) canClick = true; pop(); push(click); } else { push(click); canClick = true; } } } else { //队空直接push ClickInner click = new ClickInner(clickId); click.setCurrent(currentClickTime); push(click); canClick = true; } return canClick; }
使用方法
public void onBtnNewRegisterClicked() { if (!ClickUtils.getInstance().checkClick(R2.id.btn_new_register)) return; //do some thing here... }
完整代码链接
ClickUtils : http://pan.baidu.com/s/1eSjFQaY
密码:vp9c
阅读全文
0 0
- 按钮防抖(防止重复点击)
- 防止按钮重复点击
- 简单防止按钮重复点击
- Android 防止重复按钮点击
- jquery防止按钮重复点击
- android 防止 多次点击 重复点击按钮
- android 按钮防止连续点击防止按钮重复点击
- Github项目解析(七)-->防止按钮重复点击
- 【Android】Android防止过快点击造成多次事件执行(防止按钮重复点击)
- 【Android】Android防止过快点击造成多次事件执行(防止按钮重复点击)
- 【Android】Android防止过快点击造成多次事件执行(防止按钮重复点击)
- 【Android】Android防止过快点击造成多次事件执行(防止按钮重复点击)
- ASP.NET防止重复点击提交按钮
- Android 防止按钮控件被重复点击
- 防止按钮重复点击的js实现
- Extjs防止按钮重复点击插件
- 防止重复点击按钮方案总结
- 防止按钮短时间内重复点击
- 【区块链】TestRPC Runtime Error: out of gas
- hadoop中NameNode、DataNode、Secondary、NameNode、JobTracker TaskTracker介绍
- Qt下使用微软的TTS
- 二叉树的遍历
- 考研数学
- 按钮防抖(防止重复点击)
- MT 110 Advice of Cheque(s)通知支票情况
- ios-GADBannerView设置背景图片
- 序列会扩展知识
- MT 111 Request for Stop Payment of a Cheque请求止付支票
- 高位优先的字符串排序(c++ ASCII)
- C语言中自动获取当前时间和日期
- Spring Security教程(13)---- 验证码功能的实现
- MySQL5.7.19免安装版的安装与卸载重装