zoukankan      html  css  js  c++  java
  • AOP集成防止连续多次点击问题

    AOP即Aspect Oriented Programming的缩写,习惯称为切面编程;与OOP(面向对象编程)万物模块化的思想不同,AOP则是将涉及到众多模块的某一类问题进行统一管理,AOP的优点是将业务逻辑与系统化功能高度解耦,让我们在开发过程中可以只专注于业务逻辑,其他一些系统化功能(如路由、日志、权限控制、拦截器、埋点、事
    件防抖等)则由AOP统一处理;
     
    集成
    //root gradle
     dependencies {
            classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.1'
            }
    
    //app或module gradle
    apply plugin: 'android-aspectjx'    //插件
    
    compile 'org.aspectj:aspectjrt:1.8.9'   //jar

    代码

    public class NoDoubleClickUtils {
    
        private final static int SPACE_TIME = 500;//2次点击的间隔时间,单位ms
        private static long lastClickTime;
    
        public synchronized static boolean isDoubleClick() {
            long currentTime = System.currentTimeMillis();
            boolean isClick;
            if (currentTime - lastClickTime > SPACE_TIME) {
                isClick = false;
            } else {
                isClick = true;
            }
            lastClickTime = currentTime;
            return isClick;
        }
    }
    
    @Aspect
    public class AspectTest {
        final String TAG = AspectTest.class.getSimpleName();
    
        @Around("execution(* android.view.View.OnClickListener.onClick(..))")
        public void onClickLitener(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
            Log.e(TAG, "OnClick");
            if (!NoDoubleClickUtils.isDoubleClick()) {
                proceedingJoinPoint.proceed();
            }
        }
    }
    这样就能hook到所有onClick多次重复点击的问题了,有效防止连续点击
    (非原创,只为记录问题,以供以后查看)
     
  • 相关阅读:
    葡萄城报表介绍:数据报表的七个原则
    while(scanf("%d",&n)!=EOF)
    不容易系列之(3)—— LELE的RPG难题
    错排公式
    _​_​i​n​t​6​4​ ​与​l​o​n​g​ ​l​o​n​g​ ​i​n​t
    杭电ACM 2046 阿牛的EOF牛肉串
    C++Builder 中使用 __int64 整数的问题
    折线分平面——杭电2050
    复合梯形公式与复合辛普森公式求积分
    两套蓝桥杯热身题
  • 原文地址:https://www.cnblogs.com/fengfenghuifei/p/11224832.html
Copyright © 2011-2022 走看看