首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Android中requestLayout、invalidate

2024-12-20 来源:化拓教育网

0 概述

image.png

1 requestLayout流程

image.png

requestLayout的时候,会根据责任链模式,将事件向上传递给ViewRootImpl,最终调用View
RootImpl的requestLayout方法,开启一轮新的measure、layout以及draw的过程。

2 invalidate流程

image.png

invalidate是失效的意思,该函数在主线程调用,同样会走到ViewRootImpl的performTraversals当中,但是由于标志位的不同,不会像requestLayout一样,而是只进行draw过程。

3 postInvalidate

这个方法是在子线程调用,通过Handler发送异步消息到主线程,最终还是会走到invalidate当中。

4 总结

一般来说,如果View确定自身不再适合当前区域,比如说它的LayoutParams发生了改变,需要父布局对其进行重新测量、布局、绘制这三个流程,往往使用requestLayout。而invalidate则是刷新当前View,使当前View进行重绘,不会进行测量、布局流程,因此如果View只需要重绘而不需要测量,布局的时候,使用invalidate方法往往比requestLayout方法更高效。

显示全文