Android UI绘制流程解析

Android中的View绘制流程 Android中的View绘制流程可以概括为三个主要阶段:测量(Measure)、布局(Layout)和绘制(Draw)。这三个阶段依次进行,共同决定了View的最终呈现效果。测量(Measure)测量阶段的主要任务是确定View的大小。Android系统会遍历View树,对每个View进行测量,以确定其宽度和高度。这个过程是通过调用View的measure()方法实现的。在测量过程中,View会根据其布局参数(如等)和父容器的约束条件来计算自己的测量宽度和高度。 阅读详情

目录

写在前面

一、UI绘制流程及原理

二、View的绘制流程

三、UI绘制详细步骤


写在前面

今天这篇文章其实是我的一篇学习笔记哈,整体写的比较简单,为了日后复习用,我就把它放在了博客上,勿喷!谢谢!

一、UI绘制流程及原理

问题:View是如何被添加到屏幕窗口上的

  • 创建顶层布局容器DecorView
  • 在顶层布局中加载基础布局ViewGroup
  • 将ContentView添加到基础布局中的FrameLayout中

源码分析:自定义测试入口类继承自Activity

public class TestActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_address_layout);
    }
}

Activity:



The only existing implementation of this abstract class is android.view.PhoneWindow, which you should instantiate when needing a Window.   这里意思是它是一个抽象类,并且具有唯一的实现类PhoneWindow。




generateLayout根据系统主题的属性通过requestFeature()和setFlags()进行一系列调用。接着是进行解析窗口View,根据feature的值对layoutResource进行不同的赋值操作,初始化好layoutResource之后,通过


将layoutResource进行解析创建了一个root对象,然后将root对象添加到DecorView里面,然后重新回到上面去:

得到contentParent之后,最后将它进行返回。

总结:

接着会调用:mLayoutInflater.inflate(layoutResID, mContentParent); 将我们在activity中设置的布局资源通过xml解析添加到frameLayout中。

二、View的绘制流程

首先来看这张图,总结了View的绘制流程:

源码分析:

ActivityThread:--->handleMessage()--->LAUNCH_ACTIVITY



此时会回调Activity生命周期的onResume()方法。



接着去WindowManagerImpl中找addView()方法:









三、UI绘制详细步骤

同样的,首先来看下面这张图:

接着来看测量,下面是具体的源码跟踪:







查看FrameLayout的onMesure()方法,因为DecorView是继承自FrameLayout:

布局:

、

绘制:

最后是测量布局绘制整个的流程总结:

OK,这篇笔记就到这里了!

汽车OTA自动化测试解决方案 目前OTA远程升级技术已成为众多汽车制造商的标配。由于OTA升级可能会带来潜在的风险(特别是包含ECU固件更新的FOTA升级),针对OTA系统的测试过程就尤为重要。 阅读详情

相关推荐

【模型转换】将.mindir文件转换成.ms文件(Windows篇)

首先需要在MindSpore中训练好并经过评估可用的模型,可以以标准格式(例如onnx, mindir等)导出,得到.mindir模型文件(例如lenet.mindir)。为了将模型部署到自定义应用中,还需要将其转换为更为紧凑和高效的ms格式模型,用于在MindSpore-Lite环境中推理,这可以通过MindSpore Lite提供的模型转换工具converter_lite完成。

qq_42962847的博客 1425

一篇文章教你读懂UI绘制流程我的Android重构之旅:框架篇

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!最后如何才能让我们在面试中对答如流呢?答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?有没有免费资料可以借鉴?为此我整理了一份Android学习资料路线:这里是一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套BAT大厂面试资料专题包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家。

2401_84004024的博客 774

如何解决Windows系统中缺失oem*.inf文件导致的软件运行问题

本文详细解析了Windows系统中因oem*.inf文件缺失导致软件无法运行的常见问题。文章阐述了oem*.inf文件作为安装信息文件的重要作用,并提供了从精准定位文件路径、安全获取与替换文件的手动修复步骤,到利用专业工具进行一站式修复的完整解决方案。最后,还给出了从软件安装来源、卸载习惯到系统维护等方面的预防措施,帮助用户彻底避免此类问题。

water的专栏 546

AndroidUI绘制流程

在进入到activity 之后 会优先创建顶层布局 decorView 来设置系统需要的主题参数将decorView 添加到基础布局中 返回 viewGroup 不同的主题加载不同的viewGroup 但是都会有一个容器OnDraw的id最后被setContentView添加到布局中绘制过程ViewGroup绘制背景绘制自己绘制 子控件绘制前景 滚动条等View绘制背景调用自己的 ondraw绘制前景 滚动条等。

doomwatcher的博客 949

OpenFOAM算例文件结构深度解析:以cavity案例为例教你读懂每个文件夹的作用

本文以OpenFOAM经典cavity案例为例,深度解析CFD算例文件结构。详细阐述了0、constant、system三个核心目录的作用:0存放初始与边界条件,constant定义物理属性和网格,system控制求解策略。通过剖析关键文件,帮助用户理解每个参数的意义,掌握从读懂到定制算例的能力,为高效使用这一开源CFD工具奠定坚实基础。

beer8的博客 238

避坑指南:群晖DSM 7.X挂载NTFS硬盘,为什么你的SATA口不行?从原理到实战一次讲清

本文深入解析群晖DSM 7.X系统挂载NTFS硬盘的底层原理与实战排查方法,揭示SATA接口权限配置的关键参数(如esataportcfg和internalportcfg),并提供安全修改端口配置的详细步骤。针对不同型号群晖NAS的配置差异,给出替代方案与常见故障排查技巧,帮助用户解决NTFS硬盘挂载问题。

weixin_26757925的博客 256

【Android】之【View绘制】

Android Activity加载、View绘制流程解析。

Crazy程序猿 4712

【开源教程25】疯壳·开源编队无人机-定高、定点、悬停

【开源教程25】疯壳·开源编队无人机-定高、定点、悬停

efans_Mike的博客 1652

Android绘制机制流程分析

Android绘制机制流程分析

2201_75513406的博客 541

将Matlab程序打包成.exe独立可执行程序

将Matlab程序打包成.exe独立可执行程序,在未安装Matlab的电脑上也能运行Matlab程序。

简简单单的学习笔记,致力于帮助更多前进路上的朋友~ 5万+

物联网定位技术|实验报告|实验一 Wi-Fi指纹定位

全球定位系统是迄今为止应用最为成功的地位系统,具备高精度的定位能力,但在室内和高楼密布的城区等信号遮挡严重的密集环境中,由于接受机捕获不到足够强度的卫星信号,GPS的定位质量难以保证甚至无法完成定位,使其可用性受到严重制约。由于室内环境下都普及了WiFi,因此利用WiFi进行定位无需额外部署硬件设备,是一个非常节省成本的方法。

m0_57656758的博客 3356

Android UI绘制源码解析(UI绘制流程)

一 setContentView( )源码解析 我们都知道,在Activity的onCreate()方法里,通常会调用setContentView()这个方法,这个方法其实就是UI绘制的入口,我们来看一下这个方法的源码。 Activity.setContentView() public void setContentView(@LayoutRes int layoutResID) { //getWindow返回的其实就是Window,它是一个抽象类,唯一实现它的是PhoneWindow

qq_39431405的博客 1607

Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)

本文介绍了如何基于Spring Boot 3.2、Spring AI 1.0.0-M4、DeepSeek API和Redis构建具备上下文记忆功能的智能聊天应用。项目采用现代化技术栈,包括Java 17、Maven、Lombok等,实现了智能对话、会话管理、异常处理等核心功能。文章详细讲解了环境搭建、配置管理(含Redis和AI服务集成)、核心组件设计(如消息实体、控制器和服务层实现),以及完整的项目结构。该项目提供了美观的Web界面和REST API,支持对话上下文存储(通过Redis实现)和系统监控,可

博客 829

Android源码解析:UI绘制流程是如何开始的?

带着问题看源码 经过前几篇源码解析文章,我们了解到打开一个新的Activity界面,会执行到Activity的onCreate()方法,然后我们调用setContentView()方法传入希望展示的xml布局,但是我们传入的布局文件时如何展示在手机上的呢?带着这个问题,我们一起深入源码查找解惑 先看Activity的生命周期: 这张图不用多解释了吧!这里要讲的是用户看到Activity界面是...

weixin_34060299的博客 186

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 绘制过程分析,Android源码解析UI绘制流程

说到android的UI绘制流程,咱们首先介绍一下setContentView这个大家经常用到的方法。当创建一个Activity时,实现了onCreate方法,然后把创建好的布局Layout或者View通过调用setContentView(xxx)就显示到窗口中了。那么接下来就带着下面的疑问,了解View的加载过程。为什么调用了setContentView后就可以显示出我们的局部页面?看看源码中s...

weixin_39787594的博客 115

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android ui 绘制过程,AndroidUI绘制流程,一步一步深入源码解析(五)view绘制

View的绘制:四个关键步骤:1、绘制背景 drawBackgroud(canvas)2、绘制自己 onDraw(canvas)3、绘制子VIew dispatchDraw(canvas)4、绘制前景,滚动条等装饰 onDrawForeground(canvas)前几篇我们分析过,知道view的绘制三大流程,performMeasure,performLayout以及performDraw测量、布...

weixin_29586571的博客 177

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android面试高频问题:UI绘制流程解析

一、View如何被添加到屏幕窗口 了解View如何被添加到屏幕窗口之前,先理解几个概念 Window:是一个抽象类,提供了绘制窗口的一组通过API PhoneWindow: 是Window的唯一继承实现类,该类内部包含一个DecorView的对象,该DecorView对象是所有窗口(Actvivty)的根View DecorView: 是PhoneWindow的内部类,是FrameLayout的子类,是对Framelayout进行功能的修饰(所以叫Decorxxx),是所有应用窗口的根View 以Act

m0_62167422的博客 845

Android源码解析:UI绘制流程之控件绘制

带着问题看源码 再接再厉,我们来分析UI绘制流程最后一步绘制流程 入口ViewRootImpl.performDraw()方法 private void performDraw() { //... try { draw(fullRedrawNeeded); } finally { mI...

weixin_34361881的博客 88

【Android源码】深入源码分析UI的绘制流程 附:Android源码解析资料分享

View的绘制流程 setContentView 如果你熟悉 Activity 的启动流程的话那么对时序图 ActivityThread 中 handleLaunchActivity 方法不陌生,该方法在启动 Activity 后会被调用执行 performLaunchActivity,在 performLaunchActivity 内部通过反射创建 Activity 对象。 //ActivityThread#performLaunchActivity private Activity performLa

bugmiao的博客 1049

android ui 绘制过程,AndroidUI绘制流程,一步一步深入源码解析(一)

1、UI结构,从Activity的setContentView()入手;了解xml布局的嵌套关系第一步、根据代码,源码中找到Actitivyt中setContentView()方法的实现,这里我用的是http://androidxref.com/在线源码阅读平台,选择8.0源码/*** Set the activity content from a layout resource. The re...

weixin_28940363的博客 288

android view 绘制过程,Android中View的绘制流程

一、 摘要介绍Android View的绘制流程,引出后续的异步消息、事件分发。二、 ViewRootImpl1. ViewRootImpl是什么在API文档中如此描述ViewRootImpl:/*** The top of a view hierarchy, implementing the needed protocol between View* and the WindowManager....

weixin_30986079的博客 181

Android源码解析:UI绘制流程之布局

带着问题看源码 上篇文章我们查看了UI绘制流程的测量方法,接着我们来看布局 同样从ViewRootImpl的performTraversals()方法中的performLayout()方法开始分析 private void performLayout(WindowManager.LayoutParams lp, int desiredWindowWidth, i...

weixin_34292959的博客 88
上一篇: 安卓组件化架构设计
下一篇: AndroidUI之Paint画笔高级应用
江湖客陆仁甲
博客等级 码龄10年 179粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值