@Override
protected void onCreate(Bundle savedInstanceState) {
TimeMonitorManager.getInstance().getTimeMonitor(TimeMonitorConfig.TIME_MONITOR_ID_APPLICATION_START).recordingTimeTag(“SplashActivity-onCreate”);
super.onCreate(savedInstanceState);
initData();
TimeMonitorManager.getInstance().getTimeMonitor(TimeMonitorConfig.TIME_MONITOR_ID_APPLICATION_START).recordingTimeTag(“SplashActivity-onCreate-Over”);
}
@Override
protected void onStart() {
super.onStart();
TimeMonitorManager.getInstance().getTimeMonitor(TimeMonitorConfig.TIME_MONITOR_ID_APPLICATION_START).end(“SplashActivity-onStart”, false);
}
特点
精确,可带到线上,推荐使用。
注意
在上传数据到服务器时建议根据用户ID的尾号来抽样上报。
onWindowFocusChanged只是首帧时间,App启动完成的结束点应该是真实数据展示出来的时候,如列表第一条数据展示,记得使用getViewTreeObserver().addOnPreDrawListener(),它会把任务延迟到列表显示后再执行。
AOP(Aspect Oriented Programming)打点
面向切面编程,通过预编译和运行期动态代理实现程序功能统一维护的一种技术。
作用
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合性降低,提高程序的可重用性,同时大大提高了开发效率。
AOP核心概念
1、横切关注点
对哪些方法进行拦截,拦截后怎么处理。
2、切面(Aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象。
3、连接点(JoinPoint)
被拦截到的点(方法、字段、构造器)。
4、切入点(PointCut)
对JoinPoint进行拦截的定义。
5、通知(Advice)
拦截到JoinPoint后要执行的代码,分为前置、后置、环绕三种类型。
准备
首先,为了在Android使用AOP埋点需要引入AspectJ,在项目根目录的build.gradle下加入:
classpath ‘com.hujiang.aspectjx:gradle-android-plugin- aspectjx:2.0.0’
然后,在app目录下的build.gradle下加入:
apply plugin: ‘android-aspectjx’
implement ‘org.aspectj:aspectjrt:1.8.+’
AOP埋点实战
JoinPoint一般定位在如下位置
1、函数调用
2、获取、设置变量
3、类初始化
使用PointCut对我们指定的连接点进行拦截,通过Advice,就可以拦截到JoinPoint后要执行的代码。Advice通常有以下几种类型:
1、Before:PointCut之前执行
2、After:PointCut之后执行
3、Around:PointCut之前、之后分别执行
首先,我们举一个小栗子:
@Bef