性能优化,还得看AspectJ

https://mp.weixin.qq.com/s/heBoKE2UqMgp4_zm_fciuA

笔记:


image.png

APT应用:Dagger,butterKnife,组件化方案等等,应用在编写代码过程中;
AspectJ:主要用于性能监控,日志埋点等,应用在一些第三方sdk中,因为该sdk已经做好了,代码层面已经不能动了;

@Before("execution(* com.hujiang.library.demo.DemoActivity.test(..))"),在执行com.hujiang.library.demo.DemoActivity.test方法之前进行该方法的织入;

image.png

代码织入的原理:生成一个Pointcut对象?

// 调用test()方法的时候,该注解的方法没有参数
@Pointcut("call(* com.hujiang.library.aspect.MainActivity.test(..))")
public void invoke() {
}

// 同时满足前面的条件,即在test2()方法内调用test()方法的时候才切入
@Pointcut("invoke() && invoke2()")
public void invokeOnlyIn2() {
}

//该注解的方法有参数
@Before("invokeOnlyIn2()")
public void beforeInvokeOnlyIn2(JoinPoint joinPoint) {
String key = joinPoint.getSignature().toString();
Log.d(TAG, "beforeInvokeOnlyIn2: " + key);
}

当一个Pointcut作为其它Pointcut的限制条件的时候,该Pointcut使用@Pointcut注解?

实现登录检查的操作。类似的思想也可以实现:检查网络状况、检查权限状态、避免按钮多次点击、自动完成缓存等情况。
如何实现:通过自定义注解,对加入该注解的方法进行代码织入。避免按钮多次点击:加入时间判断即可。

你可能感兴趣的:(性能优化,还得看AspectJ)