Android中 使用AOP避免重復點擊事件
```
``` 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;
}
```