使用AOP的形式,实现自动化测速,主要包括:冷启动时间,页面渲染时间,网络API加载时间,网络流量监控
从自定义application的构造器开始记时,到第一个用户可操作界面渲染完成为至;
view的绘制流程如下:1)绘制背景,2)onDraw(),3)dispatchDraw(),4)绘制其他的装饰。因此可以使用一个FrameLayout对每个界面的root view 进行包装,其dispatchDraw()执行完的时间,即为渲染完成时间。但是这里会存在多次渲染的问题,invalidate()方法会依次回溯到根view,并调用draw()方法,最后绘制脏数据区。因此会多次调用dispatchDraw()方法,这里将渲染分为2中:初始渲染和网络二次渲染,只在满足特定的记录条件时,才记录时间。
如果使用了统一的网络库,那么会比较好做
- 使用ASM插桩,无潜入式的进行测速;
- 对特定界面和特定接口进行测速;
- 生成唯一不变的pageId;
- Fragment;