美文网首页
View执行onMeasure,onLayout的次数

View执行onMeasure,onLayout的次数

作者: A代码搬运工 | 来源:发表于2019-06-04 20:52 被阅读0次

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传入的测量规格是第一次不一样,这个通过断点调试非常清楚。

相关文章

网友评论

      本文标题:View执行onMeasure,onLayout的次数

      本文链接:https://www.haomeiwen.com/subject/ggorxctx.html