UI核心 - UI绘制流程及原理

13.View绘制流程设计 目录介绍 01.复杂度 02.数组 03.链表 04.栈 05.队列 06.递归 07.排序 08.查找 09.散列 10.二叉树 11.堆 12.字符串 13.Tree树 14.图 15.搜索 参考内容 极客时间,王争大神的课程,数据结构和算法 01.复杂度 02.数组 03.链表 04.栈 05.队列 06.递归 07.排序 08.查找 ... 阅读详情

在这里插入图片描述

1. View添加到屏幕窗口的源码分析

入口:在Activity的onCreate中调用setContentView传入布局资源ID。
接着调用 :getWindow().setContentView(layoutResID);
其中 getWindow,返回就 Window 的唯一实现类 PhoneWindow。

    public void setContentView(@LayoutRes int layoutResID) {
        getWindow().setContentView(layoutResID);
        initWindowDecorActionBar();
    }

PhoneWindow:

    public void setContentView(int layoutResID) {
        if (mContentParent == null) {
            installDecor();
        } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
            ...
        }
        ...
    }
    private void installDecor() {
        if (mDecor == null) {
            mDecor = generateDecor(-1); // return new DecorView 
           ...
        } else {
            ...
        }
        if (mContentParent == null) {
            mContentParent = generateLayout(mDecor);
            ...
        }
    }

在这里插入图片描述
在 PhoneWindow 的 setContentView 中,会调用 installDecor 里面的方法执行 generateDecor 创建 DecorView。
DecorView继承自FrameLayout,是应用窗口的顶层View容器。
然后将 mDecor 传进 generateLayout,
该方法根据系统主题属性(如是否有ActionBar、浮动窗口等)确定不同的layoutResource(例如R.layout.screen_simple)。
通过 mDecor.onResourcesLoaded(mLayoutInflater, layoutResource); 将得到的布局资源添加到 DecorView 中。
然后通过 findViewById 获取 id 为 com.android.internal.R.id.content 的基础布局,一般为 FrameLayout,后面我们的界面就是绘制在这个布局里面的。
最终返回这个 contentParent
在这里插入图片描述

小结

PhoneWindow持有DecorView。DecorView中包含根据主题生成的基础布局(如screen_simple),该基础布局通常包含标题栏(Title/ActionBar)和内容区域(ID为content的FrameLayout)。我们的XML布局最终被添加到这个content容器中。

2. View绘制流程的触发机制

绘制的入口是ActivityThread的handleResumeActivity方法。
该方法在执行performResumeActivity(回调onResume)后,初始化WindowManager.LayoutParams,并调用WindowManager的addView方法。

WindowManager 来源:

  • Activity中的WindowManager接口实现类为WindowManagerImpl。
  • WindowManagerImpl的addView方法委托给WindowManagerGlobal的addView方法。
  • WindowManagerGlobal.addView中创建ViewRootImpl对象,并将DecorView、布局参数等与之关联。

关键调用:root.setView(view, wparams, panelParentView),其中root即为ViewRootImpl实例。

3. 绘制核心流程:PerformTraversals

在ViewRootImpl.setView中调用requestLayout()。该方法首先通过checkThread()确保当前操作在主线程执行,随后调用scheduledTraversals()。
scheduledTraversals()通过Choreographer(编舞者) post一个TraversalRunnable。当VSync信号到来时,TraversalRunnable的run方法被执行,进而调用doTraversal()。
doTraversal()的核心是调用performTraversals()。在此方法中,依次执行UI绘制的三个关键步骤:

  • 测量 (Measure):调用performMeasure(),确定View的大小。
  • 布局 (Layout):调用performLayout(),确定View的位置。
  • 绘制 (Draw):调用performDraw(),将View内容渲染到屏幕上。
    在这里插入图片描述
字节开源 DeerFlow 2.0:从 Deep Research 到 Super Agent Harness 的进化之路 GitHub Trending 冠军项目,字节跳动完全开源的超级智能体框架。支持子代理、沙箱执行、长期记忆、技能扩展,可完成从几分钟到几小时的复杂任务。本文深度解析架构设计、安装实战、技能系统,并附上独家配置指南。 阅读详情

相关推荐

别再只盯着报点率了:聊聊电容触摸屏算法里那些不为人知的‘软实力’

本文深入探讨了电容触摸屏算法中常被忽视的‘软实力’,包括环境噪声干扰、信号衰减补偿和多物理场耦合等核心挑战。通过对比消费电子与工业场景的算法需求,揭示了触摸算法在不同应用中的技术分野。文章还提供了实用的算法评估方法和前沿发展趋势,帮助开发者全面了解电容触摸屏技术的隐秘战场。

weixin_42524276的博客 389

android高级UI之UI绘制流程(整体启动流程)

对于Android UI的学习在之前也针对性的进行过一些博客记录,但是还是没能系统全面的进行深入,有些零散,而在Android应用开发中它又是非常之重要的“硬”技能,所以接下来重新定下目标,要对它进行全面系统深入的再学习总结之路,目标是不管是对于面试还是实际工作中只要是涉及到UI效果这块都能做到心中有数,来对这块的硬技能的护城河加固再加固,对于新目标的开篇少了不要对UI绘制流程有一个整体的了解,...

webor2006的博客 249

ROS学习笔记之——无人机PID调参过程记录

For cooperaive inquiries, please visit the website:guanweipeng.com

gwpscut的博客 6828

浏览器原理 - 《浏览器结构组件 / 渲染引擎工作流程webkit / Gecko》

浏览器结构 用户界面(User Interface): 包括地址栏、后退/前进按钮、书签目录等,除了用来显示你所请求页面的主窗口之外的其他部分。 浏览器引擎(Browser engine): 查询及操作渲染引擎的接口。 渲染引擎(Rendering engine): 显示请求的内容,根据请求内容进行解析,并将解析后的结果显示出来。 网络(Networking): 完成网络调用,例如 HTTP 请求...

🏆 前端领域优质创作者 1万+

手把手教你学 GPU KMD”相关内容的专栏简介与目录

本专栏系统讲解GPU内核模式驱动(KMD)开发技术,涵盖四大核心模块:1)GPU驱动架构基础,解析UMD/KMD协同机制;2)KMD核心功能,包括内存管理、命令提交、中断处理等;3)底层硬件交互,详解PCIe/DMA传输、多级页表等;4)实战进阶,结合Linux DRM框架代码分析,探讨GPU虚拟化与性能优化。面向具备OS和C语言基础的开发者,提供从理论到实践的完整学习路径,帮助深入理解图形/计算驱动栈的底层实现原理。

amy_mhd的博客 153

比NTP还牛逼的时间同步协议:1588v2,亚微秒级!

1588v2,又称为Precision Time Protocol Version 2,即精密时间协议的第二版本,或称为PTPv2,是一种精密时间同步协议标准,旨在实现网络中设备之间的高精度时间同步。该协议由IEEE标准组织发布,并在网络测量和控制系统中得到广泛应用。1588v2的主要目的是在计算机网络中提供高度准确的时间同步。它可用于确保不同设备之间的时钟同步,从而协调它们的操作。这对于需要协同工作的系统、无线通信基站等具有关键性的应用非常重要。

网络技术联盟站 4281

Android UI绘制流程及原理

一、绘制流程源码路径 1、Activity加载ViewRootImpl ActivityThread.handleResumeActivity() --> WindowManagerImpl.addView(decorView, layoutParams) --> WindowManagerGlobal.addView() 2、ViewRootImpl启动View树的遍...

m0_48019226的博客 225

Linux安装MinIO(图文解说详细版)

最近开个新坑,就是在linux环境中操作开发环境,带大家玩转Linux,会整理出一篇Linux的专栏,欢迎大家订阅!! 富贵同学linux环境为CentOS7.8 版本。 上期跟大家说了一下OpenJDK的安装,这次说一下minio的安装 第一步,进入/opt 目录,创建minio文件夹 cd /opt mkdir minio 第二步,wget下载安装包: wget https://dl.minio.io/server/minio/release/linux-amd64/minio 第三步,进入m

编码人生 5万+

iOS-UI视图的绘制原理&异步绘制

待完善

嘉达蒙的博客 619

caverdock如何使用,一文给你多方案教学!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1388

BMP280气压传感器原理图设计,已量产(压力传感器)

做嵌入式项目时,“小而精” 的传感器模块永远是刚需 —— 尤其是需要同时测气压和温度的场景,比如无人机定高、环境监测节点、穿戴设备等。最近捣鼓了一款 BMP280 的 Breakout 板,封装做得很紧凑,同时兼顾了稳定性和兼容性,这里单聊硬件设计细节。

不脱发的程序猿 300

Android View的绘制原理详解

ViewRootImpl | <---- (1) 触发:首次显示、invalidate()、requestLayout()、窗口大小改变| | (2) 发起:performTraversals()| DecorView | (顶级ViewGroup)| (包含系统UI & 用户布局) || 递归遍历v| (容器: e.g., LinearLayout) || || onMeasure() -> 测量自身 | <---- 使用 MeasureSpec。

JMY_2016的博客 1383

AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南

本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。

打造全国最全的AI Agent开发知识领域的博客 312

WMS及UI渲染底层原理学习

本文系统介绍了Android UI渲染的核心原理,包括:1) Zygote和System Server的系统进程基础;2) AMS管理应用进程的生命周期;3) WMS作为窗口管理核心的角色;4) UI绘制从invalidate到屏幕显示的完整流程;5) Activity、Window与View的协作关系;6) Surface、SurfaceFlinger等底层渲染机制。文章揭示了Android UI渲染的完整链路,从应用层到系统层的交互原理,为性能优化和问题定位提供了理论基础。通过窗口状态管理、视图测量布局

giaoho的博客 1432

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android view的绘制原理,SurfaceView 原理

PreviewQ1: 啥是SurfaceView?[一个自带surface 画布的view][能在子线程中做UI操作]Q2:在Activity 中 内嵌 SurfaceView的情况下 , UI 是如何绘制的?1)Activity 中ViewRoot 自带一个surface,我们叫它aSurface; SurfaceView 也自带一个surface,我们叫它mSurface。2)UI 绘制在这个...

weixin_36294852的博客 482

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

一篇文章教你读懂UI绘制流程

codeGoogler / 文 发表于2018-06-14 09:50 第140次阅读 ui,android开发,ui绘制流程 本文转载自http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2018/0614/9956.html 最近有好多人问我Android没信心去深造了,找不到好的工作,其实我以一个他们进行回复,发现他们主要是内心比较...

songguanxin的博客 276

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android UI系列

Android UI系列 一 UI绘制流程及原理 二 UI绘制流程(测量,布局,绘制) 三 Paint画笔高级应用 四 Paint滤镜,Xfermode 五 Canvas高阶使用技巧 六 贝塞尔曲线 七 基于PathMeasure源码分析 八 事件分发机制详解 九 自定义动画框架 十 平行动画实现 十一 屏幕适配:自定义像素适配,百分比适配,刘海屏适配 十二 自定义控件 十三 阿里VLayout原...

初心一点的专栏 213

公共技术点之 View 绘制流程

转自 :http://a.codekk.com/detail/Android/lightSky/%E5%85%AC%E5%85%B1%E6%8A%80%E6%9C%AF%E7%82%B9%E4%B9%8B%20View%20%E7%BB%98%E5%88%B6%E6%B5%81%E7%A8%8B View 绘制机制 1. View 树的绘图流程 当 Activit

linhaosheng123456的博客 309

android View的工作原理

上次我们讲了android的滑动冲突,其中也介绍了android的事件分发机制,如果对这方面不清楚的,可以查看我的上一篇博客《android滑动冲突解决方案》,这次我们主要介绍View的工作原理,为以后自定义view定下基础。下面,我讲从以下几方面来讲讲我对View工作原理的理解。 [TOC] 目录 View的UI架构 首先我们来看下UI界面结构图 想必这张图大家都很熟悉,每一个

向梦想攀爬的蜗牛 1008

Android布局文件绘制原理学习总结 -- measure/layout/draw

http://blog.youkuaiyun.com/qinjuning/article/details/7110211  http://hi.baidu.com/chunying031/item/25f5ec117fc93bfe756a8487

lihei12345的专栏 1191

【flutter】flutter核心原理总结

1、flutter架构 2、flutter UI系统 Flutter提供了一套Dart API,然后在底层通过OpenGL这种跨平台的绘制库(内部会调用操作系统API)实现了一套代码跨多端。由于Dart API也是调用操作系统API,所以它的性能接近原生。 虽然Dart是先调用了OpenGL,OpenGL才会调用操作系统API,但是这仍然是原生渲染,因为OpenGL只是操作系统API的一...

now_android 7872

View的绘制流程详解

本文解析Android视图系统的核心机制,重点阐述View绘制流程与Window窗口的关系。关键点包括:1) Activity通过PhoneWindow管理DecorView这一根视图;2) ViewRootImpl作为核心引擎,连接应用视图与WMS系统服务;3) 绘制流程的三阶段测量(Measure)、布局(Layout)和绘制(Draw)由ViewRootImpl触发;4) WMS管理窗口生命周期,Surface作为绘图数据缓冲区;5) ViewRootImpl创建时机在Activity的onResum

weixin_41553587的博客 1064

Android中View绘制流程以及invalidate()等相关方法分析

原文章:http://blog.youkuaiyun.com/qinjuning/article/details/7110211    前言: 本文是我读《Android内核剖析》第13章----View工作原理总结而成的,在此膜拜下作者 。同时真挚地向渴望了解      Android 框架层的网友,推荐这本书,希望你们能够在Android开发里学到更多的知识 。     

zuyuanzhang自学之路 441

Android中View绘制流程

1.推荐阅读:《Android内核剖析》 2.UI框架基本概念: Activity:基本的页面单元,Activity包含一个Window,window上可以绘制各种view View:最基本的UI组件,表示屏幕上的一个矩形区域; Window:表示顶层窗口,管理界面的显示和事件的响应;每个Activity 均会创建一个 PhoneWindow对象,是Act

linghu_java的专栏 963

安卓UI核心:Activity、Window与View的关系解析

Android UI系统的核心在于理解Activity、Window和View的协作关系。Activity作为"主人"负责业务逻辑,PhoneWindow(Window唯一实现类)作为"框架"提供窗口容器,View则是具体的UI元素。系统在Activity启动时自动创建PhoneWindow,开发者通过setContentView将布局添加到DecorView(PhoneWindow的根视图)中。View的绘制由ViewRootImpl触发而非PhoneWindow。

m0_74296492的博客 989

Android高级UI详解汇总

Android高级UI开发(一)RecyclerView控件的基本使用 Android高级UI开发(二)RecyclerView控件使用----列表项的单击事件、添加(删除)列表项 Android高级UI开发 ( 三 )RecyclerView控件---高级进阶之自己绘制列表分隔线 ...

gaoxiaoweiandy的专栏 4438
上一篇: 从驱动来分析服务的添加过程
下一篇: UI核心 - 绘制流程(测量、布局、绘制)
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值