本文主要是介绍【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()?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!