面试 -- requestLayout、invalidate与postInvalidate区别

requestLayout:

从方法名字可以知道,“请求布局”,那就是说,如果调用了这个方法,那么对于一个子View来说,应该会重新进行布局流程。但是,真实情况略有不同,如果子View调用了这个方法,其实会从View树重新进行一次测量、布局、绘制这三个流程,最终就会显示子View的最终情况。

invalidate:

当子View调用了invalidate方法后,会为该View添加一个标记位,同时不断向父容器请求刷新,父容器通过计算得出自身需要重绘的区域,直到传递到ViewRootImpl中,最终触发performTraversals方法,进行开始View树重绘流程(只绘制需要重绘的视图)。

postInvalidate:

postInvalidate是在非UI线程中调用,invalidate则是在UI线程中调用。 

 详细讲解见:http://blog.csdn.net/a553181867/article/details/51583060

原文地址:https://www.cnblogs.com/androidsuperman/p/7062335.html