DEVLOG 10.18 浅析View#invalidate
从源码的角度简单分析一下View#invalidate的作用,并且做出对于以下问题的回答:
简述View#invalidate过程
View#invalidate刷新只和当前的View产生关系吗?会不会和它的父容器产生关系呢?

简述View#invalidate过程
如图所示,我们先看看View#invalidate的调用链,从调用链上我们可以明确的发现,View的刷新过程是会涉及到ViewGroup的。View的刷新过程会从当前View开始,获取当前View的父容器,在通过这个父容器逐级向上,直到ViewRootImpl。在刷新过程中,在ViewGroup#invalidateChildInParent中,会计算当前的View和父容器View的并集。

ViewRootImpl最后会调用scheduleTraversal,然后再开启三大流程。
ViewGroup#invalidateChild这个方法使用了do-while循环,不断回溯寻找找当前View的父容器。因为ViewRootImpl也是ViewParent,所以找到最后会调用ViewRootImpl#invalidateChild。