先来看以下View.requestLayout源码
/**
* Call this when something has changed which has invalidated the
* layout of this view. This will schedule a layout pass of the view
* tree.
*/
public void requestLayout() {
mPrivateFlags |= PFLAG_FORCE_LAYOUT;
mPrivateFlags |= PFLAG_INVALIDATED;
if (mParent != null && !mParent.isLayoutRequested()) {
// 先上传递,最总到达顶层View即RootViewImpl
mParent.requestLayout();
}
}
查看下ViewRootImpl.requestLayout源码
public void requestLayout() {
// 检测是否在UI线程
checkThread();
mLayoutRequested = true;
// 重点
scheduleTraversals();
}
public void scheduleTraversals() {
if (!mTravers