51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

java函数防抖

从工作里爱了生命,就是通彻了生命最深的秘密。------纪伯伦

前段时间写了js防抖,今天朋友(无中生友)找我要java版的

来!

|---------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | hljs java package com.ruben.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import java.util.Timer; import java.util.TimerTask; @Aspect public class HandShakeAop { boolean antiShakeFlag = false; @Pointcut("execution(* com.ruben...*.onClick(..))||execution(* android.view..*.OnClickListener.onClick(..))") public void onClickPointcut() { } @Around("onClickPointcut()") public Object around(ProceedingJoinPoint joinPoint) { if (antiShakeFlag) { return null; } try { Object proceed = joinPoint.proceed(); antiShakeFlag = true; new Timer().schedule(new TimerTask() { public void run() { antiShakeFlag = false; } }, 5000); return proceed; } catch (Throwable throwable) { throwable.printStackTrace(); } return null; } } |

这是写在AOP里的实战,如果要精简版,就是这样

|------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | hljs java package com.ruben; import java.util.Timer; import java.util.TimerTask; /** * @ClassName: HandShakeDemo * @Date: 2020/9/25 19:49 * @Description: */ public class HandShakeDemo { public static void main(String[] args) { for (int i = 1; i <= 10; i++) { System.out.println("循环第" + i + "次"); ruben(); } } /** * 标志位需要定义在函数外边 */ public static boolean antiShakeFlag = false; /** * 执行的函数 */ public static void ruben() { if (antiShakeFlag) { return; } try { // 执行逻辑 System.out.println("ruben执行了"); // 逻辑执行完毕后置为空 antiShakeFlag = true; new Timer().schedule(new TimerTask() { public void run() { antiShakeFlag = false; } }, 5000); } catch (Throwable throwable) { throwable.printStackTrace(); } } } |

输出结果可以看到,循环正常执行,但我们的关键逻辑代码只执行了一次

image-20200925195811721

无论执行多少次,在schedule()第二个参数设置的时间(毫秒值)内都只会执行一次

赞(2)
未经允许不得转载:工具盒子 » java函数防抖