Android中 使用AOP避免重复点击事件

```javascript

```

``` javascript

//上次点击的时间

private static Long sLastclick =0L;

//拦截所有两次点击时间间隔小于一秒的点击事件

private static final Long FILTER_TIMEM =1000L;

//上次点击事件View

private View lastView;

//---- add content -----

//是否过滤点击 默认是

private boolean checkClick =true;

//---- add content -----

@Around("execution(* android.view.View.OnClickListener.onClick(..))")

public void onClickLitener(ProceedingJoinPoint proceedingJoinPoint)throws Throwable {

//大于指定时间

if (System.currentTimeMillis() -sLastclick >=FILTER_TIMEM) {

doClick(proceedingJoinPoint);

}else {

//---- update content -----? 判断是否需要过滤点击

//小于指定秒数 但是不是同一个view 可以点击? 或者不过滤点击

if (!checkClick ||lastView ==null ||lastView != (proceedingJoinPoint).getArgs()[0]) {

//---- update content -----? 判断是否需要过滤点击

doClick(proceedingJoinPoint);

}else {

//大于指定秒数 且是同一个view

LogUtils.e(TAG,"重复点击,已过滤");

}

}

}

//执行原有的 onClick 方法

private void doClick(ProceedingJoinPoint joinPoint)throws Throwable {

//判断 view 是否存在

if (joinPoint.getArgs().length ==0) {

joinPoint.proceed();

return;

}

//记录点击的view

lastView = (View) (joinPoint).getArgs()[0];

//---- add content -----

//修改默认过滤点击

checkClick =true;

//---- add content -----

//记录点击事件

sLastclick =System.currentTimeMillis();

//执行点击事件

try {

joinPoint.proceed();

}catch (Throwable throwable) {

throwable.printStackTrace();

}

}

@Before("execution(@包名.RepeatClick? * *(..))")

public void beforeEnableDoubleClcik(JoinPoint joinPoint)throws Throwable {

checkClick =false;

}

```