導航:首頁 > 編程語言 > aop編程Android

aop編程Android

發布時間:2023-06-07 09:17:42

㈠ 什麼是aop

AOP為Aspect Oriented Programming的縮寫,是面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟體開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生范型。

AOP的出現彌補了OOP的這點不足,AOP 是一個概念,一個規范,本身並沒有設定具體語言的實現,AOP是基於動態代理模式。AOP是方法級別的,要測試的方法不能為static修飾,因為介面中不能存在靜態方法,編譯就會報錯。

AOP可以分離業務代碼和關注點代碼(重復代碼),在執行業務代碼時,動態的注入關注點代碼。切面就是關注點代碼形成的類。Spring AOP中的動態代理主要有兩種方式,JDK動態代理和CGLIB動態代理。JDK動態代理通過反射來接收被代理的類,並且要求被代理的類必須實現一個介面。

(1)aop編程android擴展閱讀

AOP實現的關鍵在於AOP框架自動創建的AOP代理,AOP代理主要分為靜態代理和動態代理,靜態代理的代表為AspectJ。而動態代理則以Spring AOP為代表,靜態代理是編譯期實現,動態代理是運行期實現,可想而知前者擁有更好的性能。

靜態代理是編譯階段生成AOP代理類,也就是說生成的位元組碼就織入了增強後的AOP對象;動態代理則不會修改位元組碼,而是在內存中臨時生成一個AOP對象,這個AOP對象包含了目標對象的全部方法,並且在特定的切點做了增強處理,並回調原對象的方法。

㈡ 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;

}

```

閱讀全文

與aop編程Android相關的資料

熱點內容
asp程序員收入 瀏覽:332
無線有密碼顯示未加密 瀏覽:210
檢查伺服器地址命令 瀏覽:597
編譯過程和解釋過程的圖表形式 瀏覽:835
文明重啟如何弄自己的伺服器免費 瀏覽:912
伺服器許可權不足如何解決 瀏覽:373
少兒編程樂高主要是學什麼 瀏覽:674
張家口人社app如何實名認證 瀏覽:296
淘寶圖片怎麼設置加密 瀏覽:314
pdf拼接器 瀏覽:786
只有程序員能看得懂 瀏覽:183
java打成jar包 瀏覽:214
朗動大屏怎麼連安卓 瀏覽:331
如何把微信掛在伺服器上 瀏覽:822
linux比對兩個文件夾文件差異 瀏覽:457
火牛app怎麼刷火鑽 瀏覽:560
高中vb編程 瀏覽:818
國家反詐中心app如何設置來電預警 瀏覽:427
vB6如何做opc伺服器介面 瀏覽:252
數學分析考研真題pdf 瀏覽:371