利用AOP来防止view多次点击事件触发
(支持butterknife的onClick、view.setonClickListener()等)老项目慎用,适应新建项目
参考:https://www.jianshu.com/p/e152b34b785b
1、app.build
//在dependencies中
implementation 'org.aspectj:aspectjrt:1.9.5'
//androidstudio4.0以上需加(与dependencies平齐的位置)
aspectjx {
enabled true
exclude 'com.google','com.taobao','com.alipay'(过滤需要的第三方,支付宝等;具体用法见https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx)
}
2、project.build
dependencies {
//建议3.6.1以上
classpath 'com.android.tools.build:gradle:3.6.3'
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
}
3、新建ClickFilterHook的Java文件(自动捕捉的)
/**
* @Description:防view多次点击事件 能捕捉到OnClickListener(包括butterknife的onClick)
* @Author:liwk
* @Date:2020/9/14 14:23
*/
@Aspect
public class ClickFilterHook {
private static Long sLastclick = 0L;
//因为会影响所有的点击事件,设置0.3s左右不影响
private static final Long FILTER_TIMEM = 300L;
@Around("execution(* android.view.View.OnClickListener.onClick(..))")
public void clickFilterHook(ProceedingJoinPoint joinPoint) {
if (System.currentTimeMillis() - sLastclick >= FILTER_TIMEM) {
sLastclick = System.currentTimeMillis();
try {
joinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
}