Android 利用AOP实现防抖功能

@Aspect
public class ClickAspect {
    
    private static LruCache<Integer, Long> clickCache = new LruCache<>(5);

    @Pointcut("execution(@ClickSingle * * (..)) && @annotation(clickSingle)")
    public void click(ClickSingle clickSingle) {
    }


    @Around("click(clickSingle)")
    public void getClickPoint(ProceedingJoinPoint proceedingJoinPoint, ClickSingle clickSingle) throws Throwable {
        if (clickCache.get(proceedingJoinPoint.getSignature().hashCode()) != null) {
            if (clickCache.get(proceedingJoinPoint.getSignature().hashCode()) + clickSingle.value() <= System.currentTimeMillis()) {
                clickCache.put(proceedingJoinPoint.getSignature().hashCode(), System.currentTimeMillis());
                proceedingJoinPoint.proceed();
            }
        } else {
            clickCache.put(proceedingJoinPoint.getSignature().hashCode(), System.currentTimeMillis());
            proceedingJoinPoint.proceed();
        }
    }
}

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ClickSingle {
    int value() default 150;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容