View#invalidate方法是如何更新UI的

简介: View#invalidate方法是如何更新UI的

View#invalidate方法是如何更新UI的

这里拿TextView#setText 举一个例子:

TextView.setText()  —> 
TextView#checkForRelayout  —> 
View#invalidate —> 
View#invalidateInternal -> 
ViewParent#invalidateChild  —> 
ViewGroup#invalidateChild do-while循环调用 —> 
ViewRootImpl#invalidateChildInParent —> 
viewRootImpl#checkThread 和
viewRootImpl#invalidate —> 
viewRootImpl#scheduleTraversals —> 
mChoreographer(内部维护了一个FrameHandler).postCallback(mTraversalRunnable….) —> 
doTraversal -> 
ViewRootImpl#doTraversal --> 
ViewRootImpl#performTraversals 就会调用 onMeasure onLayout onDraw。

从整个调用链来看,应该会将刷新视图事件包装成一个Runable,添加至MessageQueue中,Looper轮询取出,Handler#handleMessage接收到绘制事件回调并调用viewRootImpl#performTraversals完成最终绘制.

View#invalidate方法是如何更新UI的

这里拿TextView#setText 举一个例子:

TextView.setText()  —> 
TextView#checkForRelayout  —> 
View#invalidate —> 
View#invalidateInternal -> 
ViewParent#invalidateChild  —> 
ViewGroup#invalidateChild do-while循环调用 —> 
ViewRootImpl#invalidateChildInParent —> 
viewRootImpl#checkThread 和
viewRootImpl#invalidate —> 
viewRootImpl#scheduleTraversals —> 
mChoreographer(内部维护了一个FrameHandler).postCallback(mTraversalRunnable….) —> 
doTraversal -> 
ViewRootImpl#doTraversal --> 
ViewRootImpl#performTraversals 就会调用 onMeasure onLayout onDraw。

从整个调用链来看,应该会将刷新视图事件包装成一个Runable,添加至MessageQueue中,Looper轮询取出,Handler#handleMessage接收到绘制事件回调并调用viewRootImpl#performTraversals完成最终绘制.

相关文章
|
3月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
62 2
|
6月前
|
前端开发 图形学
Unity精华☀️UI和物体可见性的判断方法
Unity精华☀️UI和物体可见性的判断方法
|
8月前
|
存储 开发框架 JavaScript
深入探讨Flutter中动态UI构建的原理、方法以及数据驱动视图的实现技巧
【6月更文挑战第11天】Flutter是高效的跨平台移动开发框架,以其热重载、高性能渲染和丰富组件库著称。本文探讨了Flutter中动态UI构建原理与数据驱动视图的实现。动态UI基于Widget树模型,状态变化触发UI更新。状态管理是关键,Flutter提供StatefulWidget、Provider、Redux等方式。使用ListView等可滚动组件和StreamBuilder等流式组件实现数据驱动视图的自动更新。响应式布局确保UI在不同设备上的适应性。Flutter为开发者构建动态、用户友好的界面提供了强大支持。
136 2
|
8月前
|
XML API Android开发
06. 【Android教程】Android 的 UI 根基 View与View
06. 【Android教程】Android 的 UI 根基 View与View
63 1
|
9月前
|
iOS开发
Xcode强大的多视图立体分层显示View UI Herarchy
Xcode强大的多视图立体分层显示View UI Herarchy
74 0
|
9月前
|
小程序
【微信小程序6】引入第三方UI的方法(ColorUi)
【微信小程序6】引入第三方UI的方法(ColorUi)
733 0
|
9月前
|
算法 API C++
【Qt UI】QT 窗口/控件置顶方法详解
【Qt UI】QT 窗口/控件置顶方法详解
647 0
|
9月前
|
Android开发 容器
Android UI设计: 什么是View和ViewGroup?
Android UI设计: 什么是View和ViewGroup?
225 0
|
前端开发
element-ui图标偶现乱码问题的原因和修复方法
之前很老的一个 webpack3 前端项目,用 vue-cli5 重构了一下,根据 vue-cli 文档安装的 sass 版本 ^1.32.7,sass-loader 版本 ^12.0.0,各种自测感觉没问题了就部署到线上了
324 0
|
JavaScript
element-ui(vue)upload组件的http-request方法的使用
element-ui(vue)upload组件的http-request方法的使用
467 0

热门文章

最新文章