Skip to content
阅读进度

invalidate 和 requestLayout 有什么区别? ​

返回 Framework 与系统服务 目录

标准回答 ​

invalidate 表示内容需要更新,通常触发后续绘制;requestLayout 表示尺寸或布局关系可能变化,需要重新测量和布局。只改变颜色、进度或绘制内容时,我通常使用 invalidate;改变宽高、文本尺寸或影响父子布局的属性时,需要 requestLayout,很多属性 setter 会自行调用。实际 traversal 会根据脏标记合并多次请求,不是每调用一次就立刻完成一轮绘制。对已经挂载的 View,更新应在所属 UI 线程进行。

延伸追问 ​

两者都不是立即送显的同步接口;不要为了保险在每次更新时无条件同时调用。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。