前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android里使用AspectJ实现双击自定义注解

Android里使用AspectJ实现双击自定义注解

作者头像
Kiba518
发布2024-02-23 08:11:48
1060
发布2024-02-23 08:11:48
举报
文章被收录于专栏:Kiba518

创建注解

首先创建一个双击注解。

代码语言:javascript
复制
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
​
/**
 * <pre>
 *     desc   : 双击
 *     author : 刘金
 *     time   : 2023/2/28 下午6:35
 * </pre>
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DoubleClick {
​
    long DEFAULT_INTERVAL_MILLIS = 1000;
​
    /**
     * @return 快速点击的间隔(ms),默认是1000ms
     */
    long value() default DEFAULT_INTERVAL_MILLIS;
}

使用AspectJ进行埋点

为了在 Android 使用 AOP 埋点需要引入 AspectJX,在项目根目录的 build.gradle 下加入:

代码语言:javascript
复制
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0'

然后,在 app 目录下的 build.gradle 下加入:

代码语言:javascript
复制
apply plugin: 'android-aspectjx'
implement 'org.aspectj:aspectjrt:1.8.+'
    
// AspectJX默认会处理所有的二进制代码文件和库,为了提升编译效率及规避部分第三方库出现的编译兼容性问题,
// AspectJX提供include,exclude命令来过滤需要处理的文件及排除某些文件(包括class文件及jar文件)。
// 常用排除一些目录下的代码
aspectjx {
    exclude 'versions.9', 'androidx', 'com.google', 'com.taobao', 'com.ut'
}

注:埋点后有时候需要重新编译,不然即使代码正确也提示异常。

然后编写双击埋点的AspectJ类。

代码语言:javascript
复制
/**
 * <pre>
 *     desc   : 双击
 *     author : 刘金
 *     time   : 2023/2/28 下午6:35
 * </pre>
 */
@Aspect
public class DoubleClickAspectJ {
​
    @Pointcut("within(@com.weiguo.collection.annotation.DoubleClick *)")
    public void withinAnnotatedClass() {
    }
​
    @Pointcut("execution(!synthetic * *(..)) && withinAnnotatedClass()")
    public void methodInsideAnnotatedType() {
    }
​
    @Pointcut("execution(@com.weiguo.collection.annotation.DoubleClick * *(..)) || methodInsideAnnotatedType()")
    public void method() {
    }  //方法切入点
​
    @Around("method() && @annotation(doubleClick)")//在连接点进行方法替换
    public void aroundJoinPoint(ProceedingJoinPoint joinPoint, DoubleClick doubleClick) throws Throwable {
         
        if (是双击)) {
            joinPoint.proceed();//是双击,执行原方法
        } else {
​
        }
         
    } 
}

然后将注解@DoubleClick放到想双击触发的函数上即可。

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建注解
  • 使用AspectJ进行埋点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档