本文主要是介绍【Android面试八股文】自定义View执行invalidate()方法为什么有时候不会回调onDraw()?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、自定义View执行invalidate()方法为什么有时候不会回调onDraw()?
- 1.1 invalidate 软件绘制流程
- 1.2 invalidate源码分析
- 1.2.1 skipInvalidate()方法
- 1.2.2 invalidateChild方法
- 1.2.2.1 硬件加速绘制
- 1.2.2.2 软件刷新
- 1.2.3 小结
一、自定义View执行invalidate()方法为什么有时候不会回调onDraw()?
首先我们分析一下invalidate()的执行流程,源码是如何从invalidate调用到onDraw()的。由于这部分代码相对较为复杂,那么请大家参考下面的时序图。
1.1 invalidate 软件绘制流程
invalidate 软件绘制流程如下所示:

从上面的流程不难发现:
-
view的invalidate会逐层找parent一直找到DecorView,DecorView是顶层view,它有个虚拟父view为ViewRootImpl。ViewRootImpl不是一个View或者ViewGroup,它的成员mView就是DecorView,然后再由ViewRootImpl将所有的操作从ViewRootImpl自上而下开始分发,最终分发给所有的View。 -
View的
这篇关于【Android面试八股文】自定义View执行invalidate()方法为什么有时候不会回调onDraw()?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!