本文主要是介绍AOP架构的简单使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
手机App中,用户行为统计是非常重要的一部分,如何做到用户行为的统计呢,比较笨的方法是在需要统计的行为,例如朋友圈,语音等的方法的代码中,打印Log,但这样做非常的麻烦,而且工作量很大,那有没有更好的方法呢?答案就是通过AOP,那什么是AOP?
AOP是指 Aspect oriented programming,也就是面向切面编程,接下来我将展现一下如何使用AOP进行拥护行为统计,以下是我的项目目录,这里需要一个aspectJrt的jar包。
首先,我们需要编写一个注释类BehaviorTrace,用来标识方法是否要被追踪,统计
//用来标识方法是否要被追踪,统计
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface BehaviorTrace {String value();
}接着就给我们需要统计的方法进行注释
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@BehaviorTrace("摇一摇")public void play1(View view) {Log.i("MainActivity", "摇一摇被使用了");SystemClock.sleep(30);}@BehaviorTrace("语音")public void play2(View view) {int beginTime = TimeUtils.begin();SystemClock.sleep(30);/*TimeUtils.end(beginTime, "play2");*/}@BehaviorTrace("视频通话")public void play3(View view) {int beginTime = TimeUtils.begin();SystemClock.sleep(30);/*TimeUtils.end(beginTime, "play3");*/}@BehaviorTrace("商城")public void play4(View view) {int beginTime = TimeUtils.begin();SystemClock.sleep(30);/*TimeUtils.end(beginTime, "play4");*/}public void jumpToFriend(View view) {Intent i = new Intent(this,FriendActivity.class);startActivity(i);}}
编写用户行为切面
//用户行为的切面
@Aspect
public class BehaviorAspect {// 带有BehaviorTrace的方法构成了这个切面@Pointcut("execution(@com.example.aopdemo.BehaviorTrace * *(..))")public void annoHaviorTrace() {}@Around("annoHaviorTrace()")public Object weaveJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();// 类名String className = methodSignature.getDeclaringType().getSimpleName();// 方法名String mtdName = methodSignature.getName();// 功能名BehaviorTrace behaviorTrace = methodSignature.getMethod().getAnnotation(BehaviorTrace.class);String fun = behaviorTrace.value();long begin = System.currentTimeMillis();Object result = joinPoint.proceed();//方法执行后long duration = System.currentTimeMillis() - begin;Log.d("AOP", String.format("功能:%s功能,%s的%s方法执行,耗时:%d ms ", fun,className, mtdName, duration));return result;}
}
然后运行项目,当使用相应方法时,Log中打印出来的哪个方法被调用
这篇关于AOP架构的简单使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!