android layout,measure,draw资料收集

写在前面,本文对网络中一些关注标题的文章进行了下收集总结,旨在知道每个函数的意义,特别是requestLayout和invalidate这两个比较常用函数的区别。

首先放一张大神图
感觉不需要过多解释了。

然后看过一些相关代码的都知道有个ViewRootImpl的玩意儿,然后invalidate或者requestLayout都是发消息,然后最终触发一个超级长的函数:performTraversals。许多分析都很长,估计都看晕了,这个函数简短来说就是干了这么些活:

收集了两张图,表达了同一个意思。也不多说了。


在之后收集的文章中,有人提问为什么TextView需要先invalidate然后再requestLayout,requestLayout不是包含了invalidate吗,或者在addView的时候为什么requestLayout会调用两次(外部调一遍,子函数又调一遍)
首先要知道上次函数都是通过发消息的方式执行,而不是直接进行的。然后最终都是通过performTravesal函数来执行的。所以在发消息的时候通过标志位的设置来决定最后需不需要刷新之类的。再来就是父容器的标志位可以阻断子节点的刷新,因为父容器都刷了,子节点必然会刷新,所以调两次之类的其实可以省了一些消息发送。具体看我最后的参考资料吧

参考资料:


以下两篇比较长,在讲最复杂的view绘制流程,楼主太懒没怎么看

这两篇主要是讲我刚才说的问题,讲的比我清楚。我懒得码字 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值