Android开发-requestLayout与invalidate的区别

参考资料:
Android View 深度分析requestLayout、invalidate与postInvalidate
https://blog.csdn.net/a553181867/article/details/51583060

笔记:
1 requestLayout会标记View的mPrivateFlags的PFLAG_FORCE_LAYOUT,并且逐层向上调用,标记父View的标记位,最终调用ViewRootImpl的requestLayot

2 ViewRootImpl的RequestLayout方法会调用scheduleTraversals方法,最终调用measure,layout,draw三个过程

3 invalidate方法会设置PFLAG_DIRTY标记位, 并且循环向上调用,最终调用ViewRootImpl的invalidateChildParent方法,在该方法中,合并所有dirty区域,
并且调用scheduleTraversals方法,因为没有设置PFLAG_FORCE_LAYOUT标记位,因此不会measure和layout,只会draw

总结:requestLayout会重新measure,layout,draw整个View树
invalidate只会重新draw需要重新绘制的区域,不会measure和layout

猜你喜欢

转载自blog.csdn.net/qq_19694479/article/details/80654270