AOP即Aspect Oriented Programming的縮寫,習慣稱為切面編程;與OOP(面向對象編程)萬物模塊化的思想不同,AOP則是將涉及到眾多模塊的某一類問題進行統一管理,AOP的優點是將業務邏輯與系統化功能高度解耦,讓我們在開發過程中可以只專注于業務邏輯,其他一些系統化功能(如路由、日志、權限控制、攔截器、埋點、事
件防抖等)則由AOP統一處理;
集成
//root gradledependencies {classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.1'}//app或module gradle
apply plugin: 'android-aspectjx' //插件compile 'org.aspectj:aspectjrt:1.8.9' //jar
代碼
public class NoDoubleClickUtils {private final static int SPACE_TIME = 500;//2次點擊的間隔時間,單位msprivate static long lastClickTime;public synchronized static boolean isDoubleClick() {long currentTime = System.currentTimeMillis();boolean isClick;if (currentTime - lastClickTime > SPACE_TIME) {isClick = false;} else {isClick = true;}lastClickTime = currentTime;return isClick;} }@Aspect public class AspectTest {final String TAG = AspectTest.class.getSimpleName();@Around("execution(* android.view.View.OnClickListener.onClick(..))")public void onClickLitener(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {Log.e(TAG, "OnClick");if (!NoDoubleClickUtils.isDoubleClick()) {proceedingJoinPoint.proceed();}} }
?
這樣就能hook到所有onClick多次重復點擊的問題了,有效防止連續點擊
(非原創,只為記錄問題,以供以后查看)
?