美文网首页程序员Android深入
Android 万能防抖,包括但不限于点击防抖/数据防抖/事件触

Android 万能防抖,包括但不限于点击防抖/数据防抖/事件触

作者: Alex富贵 | 来源:发表于2020-08-21 11:26 被阅读0次

需求

原本是配合黄油刀的点击事件做点击防抖,例如:

@OnClick({R.id.user_home_back, R.id.user_home_edit, R.id.user_home_more, R.id.user_home_follow, R.id.user_home_chat, R.id.user_home_to_order})
    public void onViewClicked(View view) {
        if (AntiShake.check(view.getId())) return;
        switch (view.getId()) {
            case R.id.user_home_back:
                killMyself();
                break;
            //编辑个人资料
            case R.id.user_home_edit:
                launchActivity(new Intent(this, EditUserDataActivity.class));
                break;
              ........代码略

后来做了一个串口的需求,那个串口的数据没有经过处理所以需要在代码中处理数据流,也就会导致读取到同一个ic卡会不停的触发读取卡片后面的逻辑.
以前的代码已经丢掉了,这次重写了一个
需要注意的是,默认使用场景是同一个Activity里有不超过200个可以在一秒内同时点击的View,或者会同时读取/处理超过200个不同的数据,才需要扩大200这个参数(请忽略我用魔法值哈哈哈).正常页面中,size() > 50应该就够用了,合理修改这个参数可以减少内存支出.

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * ================================================
 * Description:
 * <p>
 * Created by Alex on 2020/6/10 0010
 * <p>
 * 页面内容介绍: 使用方法: 在任何需要拦截的地方(任何对象/点击/执行方法等) 加入 if (AntiShake.check(position)) return; 或 if (AntiShake.check(position, 1500)) return;
 * <p>
 * ================================================
 */
public class AntiShake {
    private static Map<String, Long> map = new LinkedHashMap<String, Long>() {
        @Override
        protected boolean removeEldestEntry(Entry<String, Long> pEldest) {
            return size() > 200;
        }
    };

    public static boolean check(Object obj) {
        return check(obj, 1000);
    }

    public static boolean check(Object obj, int delayTime) {
        Long time = map.get(obj.toString());
        if (time == null) {
            map.put(obj.toString(), System.currentTimeMillis());
            return false;
        } else {
            boolean b = System.currentTimeMillis() - time <= delayTime;
            if (!b) map.put(obj.toString(), System.currentTimeMillis());
            return b;
        }
    }
}

LinkedHashMap相关的内容:

JAVA 如何限制一个Map的Size

相关文章

  • Android 万能防抖,包括但不限于点击防抖/数据防抖/事件触

    需求 原本是配合黄油刀的点击事件做点击防抖,例如: 后来做了一个串口的需求,那个串口的数据没有经过处理所以需要在代...

  • 手写防抖节流函数

    1. 防抖 1.1 什么是防抖? ​ 防抖是触发高频事件后,n秒内函数只会执行一次, 如果n秒内高频事件再次触...

  • 项目常用代码

    节流 } 防抖 } 页面滚动(requestAnimationFrame) vue全局点击防抖

  • 防抖与节流

    1. 防抖函数 1.1 防抖定义: 函数防抖(debounce):当持续触发事件时(例如mousemove),一定...

  • Android 点击防抖

    Android 开发中点击事件的处理一般是网络请求、弹出提示、跳转界面。如果用户快速连续点击两次,就会请求两次网络...

  • 索尼机身防抖和镜头防抖

    索尼微单系统拥有带防抖功能的机身和带防抖功能的镜头。无论防抖组件位于哪里,它们都属于光学防抖。 机身防抖 机身防抖...

  • JS函数防抖

    JS 中的函数防抖 一、什么是函数防抖? 概念: 函数防抖(debounce), 就是指触发事件后,在 n 秒内函...

  • 节流与防抖

    使用防抖和节流技术的意义:节约资源,提升用户体验。 防抖(debounce) 防抖:触发高频事件后n秒内函数只会执...

  • 面试过程中遇到的问题记录

    1.js的防抖和节流 函数防抖 函数防抖原理(debounce):当持续触发事件时,一定时间段内没有再触发事件,事...

  • 防抖点击

    Hook反射https://blog.csdn.net/qq_32532321/article/details/8...

网友评论

    本文标题:Android 万能防抖,包括但不限于点击防抖/数据防抖/事件触

    本文链接:https://www.haomeiwen.com/subject/ohkujktx.html