导航:首页 > 编程语言 > 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相关的资料

热点内容
程序员毕设可以攻哪个方向 浏览:427
毛绒玩具怎么压缩 浏览:378
拖拉式编程教学视频 浏览:793
服务器坏了硬盘数据如何取出 浏览:602
体积加密度等于质量吗 浏览:608
如何执行命令 浏览:859
速卖通指标源码 浏览:179
linux切换root登录 浏览:925
什么是有效的服务器地址 浏览:825
交通银行app如何信用卡额度查询 浏览:479
asp程序员收入 浏览:334
无线有密码显示未加密 浏览:212
检查服务器地址命令 浏览:599
编译过程和解释过程的图表形式 浏览:837
文明重启如何弄自己的服务器免费 浏览:912
服务器权限不足如何解决 浏览:373
少儿编程乐高主要是学什么 浏览:674
张家口人社app如何实名认证 浏览:296
淘宝图片怎么设置加密 浏览:314
pdf拼接器 浏览:786