View执行onMeasure,onLayout的次数
2019-06-04 本文已影响0人
A代码搬运工
View至少会进行两次onMeasure,onLayout,sdk不同的版本 执行的次数不一样。
分析View的绘制原理,最原始的发起点都是从ViewRootImpl的performTraversals()方法。
ViewRootImpl分析ViewRootImpl的源码,由于第一次执行newsurface必须为true,需要先创建surface,会执行else的scheduleTraversales()。
ViewRootImplscheduleTraversales()内部会执行postCallBack触发mTraversalRunnable重新走一遍performTraversals(),第二次执行performTraversals()就会触发performDraw()。所以performTraversals()走了两次,那么肯定会走两次measure方法。
measure走了两次,onMeasure不一定走两次,因为View的measure是做了优化处理,造成View执行两次onMeasure,onLayout是因为第二次peformMeasure传入的测量规格是第一次不一样,这个通过断点调试非常清楚。