View执行onMeasure,onLayout的次数

2019-06-04  本文已影响0人  A代码搬运工

View至少会进行两次onMeasure,onLayout,sdk不同的版本 执行的次数不一样。

分析View的绘制原理,最原始的发起点都是从ViewRootImpl的performTraversals()方法。

ViewRootImpl

        分析ViewRootImpl的源码,由于第一次执行newsurface必须为true,需要先创建surface,会执行else的scheduleTraversales()。

ViewRootImpl

        scheduleTraversales()内部会执行postCallBack触发mTraversalRunnable重新走一遍performTraversals(),第二次执行performTraversals()就会触发performDraw()。所以performTraversals()走了两次,那么肯定会走两次measure方法。

        measure走了两次,onMeasure不一定走两次,因为View的measure是做了优化处理,造成View执行两次onMeasure,onLayout是因为第二次peformMeasure传入的测量规格是第一次不一样,这个通过断点调试非常清楚。

上一篇下一篇

猜你喜欢

热点阅读