Activity第一帧渲染涉及知识点setContentView流程、帧绘制流程、SurfaceFlinger等。
统计开始时间:
hook ActivityThread的Instrumentation, 得到Activity各个生命周期的开始、结束时间; 参考: Activity的生命周期是谁调用的?
注意: ActivityLifecycleCallbacks的回调函数是执行结束后触发的, 无法得到开始执行时间;
统计结束时间:
1、 重写Activity的onWindowFocusChanged函数, 第一次运行且focus为true时认为第一帧结束;
缺点:应用的Activity需要继承重写该方法的基类, 无法全局监听;这时Activity并没有真正渲染出来, 只是时间点很接近了。
2、对DecorView添加onDrawListener/onPreDrawListener, 即判断DecorView执行了onDraw则认为第一帧绘制完成;
优点:全局实现ActivityLifeCallBack, 在onActivityCreated函数里注册decorview的绘制监听;支持整个进程的Activity;
缺点:onDraw执行完成时View并没有真正渲染完成;
3、向DecorView添加1像素的View,