《Android开发艺术探索》读书笔记-第四章 View的工作原理

Android 开发艺术探索 - 读书笔记目录 仅作为读书笔记使用,建议阅读原书。 书中代码部分已和现版本不符,建议对比最新版本学习。 读了这本书,越发认识到和大佬们的差距。嗯,加油吧。 过去の自分が今仆の土台となる [第 1 章 - Activity 的生命周期和启动模式] 第 2 章 - IPC 机制 第 3 章 - View 的事件体系 [第 4 章 - View 的工作原理] 第 5 章 - 理解 R... 阅读详情

Android开发艺术探索-读书笔记

第四章 View的工作原理

4.1初识ViewRoot和DecorView

1)ViewRoot对应ViewRootImpl类,View的绘制流程是从ViewRoot的performTraversals方法开始的,performTraversals会依次调用performMeasure、performLayout、performDraw方法,三个方法分别完成View的measure、layout、draw方法。
2)DecorView是顶级View,通过源码可以知道,DecorView其实是一个FrameLayout。

4.2 理解MeasureSpec

1)MeasureSpec代表一个32位的int值,高两位代表SpecMode,低30位代表SpecSize。
2)SpecMode对应三类,UNSPECIFIED、EXACTLY、AT_MOST。
UNSPECIFIED:父容器不对View有任何限制,要多大给多大,这种情况一般用于系统内部,表示一种测量状态。
EXACTLY:View的大小固定,就是SpecSize对应的值,这种模式对应于LayoutParams中的match_parent和具体数值两种模式。
AT_MOST:父容器指定了一个可用大小的SpecSize,View的大小不能大于这个值,具体值要看不同View的具体表现。这种模式对应于LayoutParams中的warp_content。
3)在View测量的时候,系统会将LayoutParams在父容器的约束下转换成对应的MeasureSpec,MeasureSpec不是唯一由LayoutParams决定的,LayoutParams需要和父容器一起才能决定View的MeasureSpec。对于DecorView,其MeasureSpec由窗口的尺寸和其自自身的LayoutParams来共同确定;对于普通View,其MeasureSpec由父容器的MeasureSpec和自身的LayoutParams来共同决定。
4)当View采用固定宽/高的时候,不管父容器的MeasureSpec是什么,View的MeasureSpec都是精确模式并且其大小遵循LayoutParams中的大小。当View的宽/高是match_parent时,如果父容器是精确模式,那么View也是精确模式并且其大小是父容器的剩余空间;如果父容器是最大模式,那么View也是最大模式并且其代销不会超过父容器的剩余空间;如果View的宽/高是wrap_content时,不管父容器的模式是精确还是最大化,View的模式总是最大化并且不超过父容器的剩余空间。

View的工作流程

measure过程

1)如果View在布局中使用wrap_content,那么它的specMode是AT_MOST模式,在这种模式下,它的宽/高等于specSize,这种情况下specSize是parentSize,而parentSize是父容器中目前可以使用的大小,也就是父容器当前剩余空间的大小。
2)Activity中获得View宽高的方式:
1.onWindowFocusChanged
2.view.post(runnable)
3.ViewTreeObserver使用OnGrobalLayoutListener接口
4.手动调用View.measure()方法。

draw过程

当我们的自定义控件继承于ViewGroup并且自身不具备绘制功能时,就可以开启这个标志位从而便于系统进行后续的优化。当然,当明确知道一个ViewGroup需要通过onDraw来绘制内容时,我们需要显式地关闭WILL_NOT_DRAW这个标志位。

自定义View

当包含此View的Activity退出或者当前View被remove时,View的onDetachedFromWindow方法会被调用,和此方法对应的是onAttachedToWindow,当包含此View的Activity启动时,View的onAttachedToWindow方法会被调用。同事,当View变得不可见时我们也需要停止线程和动画,如果不及时处理这种问题,有可能会造成内存泄漏。

3分钟接入满血版DeepSeek-R1:字节火山引擎手把手教程!免费50万tokens! 阅读详情

相关推荐

Langfuse落地教程:从Docker部署到项目接入,掌控LLM调用链路

大模型应用开发中,调用链路的透明度直接决定调试效率与成本控制。可观测性技术通过记录每次请求的输入、输出、模型参数与Token消耗,帮助开发者快速定位问题。Langfuse作为开源LLM可观测性平台,将Trace、Prompt版本管理、评分等能力集成于一体,支持Docker Compose自托管部署,并提供Python/JS SDK与REST API。借助部署后的控制台,团队能够直观追踪RAG检索、Agent工具调用等复杂流程中的每一步耗时与资源占用,实现从黑盒调用到全链路可视化的转变。无论是本地调试、线上排

weixin_29698641的博客 308

[读书笔记]《Android开发艺术探索》第四章笔记

View的工作原理4.1 初识ViewRoot和DecorView1、ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewR

陶程的博客 1059

手把手教你用6轴IMU跑通LIO-SAM:参数配置与代码修改保姆级教程

本文提供了一套完整的6轴IMU适配LIO-SAM的解决方案,包括参数配置与代码修改的详细步骤。从理解6轴与9轴IMU的关键差异入手,逐步指导如何调整核心配置文件params.yaml、重构utility.h关键函数、优化mapOptimization.cpp的位姿融合逻辑,并给出编译验证与性能调优建议,帮助开发者快速实现6轴IMU在LIO-SAM中的稳定运行。

weixin_28717807的博客 357

《Android 开发艺术探索》读书笔记

《Android 开发艺术探索》这本书写的太好了,作者任玉刚也是大牛,本人十分佩服,每次阅读这本书,都有不同的理解,所以将书中重要的知识点做了一些笔记,方便以后的阅读,下面是笔记的章节:第一章 Activity的生命周期和启动模式第二章 IPC机制第三章 View的事件体系第四章 View的工作原理第五章 理解RemoteViews第六章 Android的Drawable第七章 Android动画深

K-night的专栏 1527

MTK Linux DRM分析(十一)- MTK KMS Panel显示屏驱动

面板扩展(Panel Extension)是指 MediaTek 在标准 DRM 面板驱动框架之上添加的定制化功能模块。

iTom1900 1687

windows一键安装部署wvp-GB28181-pro视频监控平台

我们可以看到redis、mysql、zlm和wvp都正常运行了。该ip需要修改为wvp服务安装的 服务器的IP。默认用户名和密码分别为admin和admin。

zengliguang的专栏 5749

android学习路线!学习Binder前必须要了解的知识点,面试心得体会

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2020年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动? 就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Android程序员的技术功底。 最近搜集了一些基础问题以及阿里、腾讯2020年一些精选的面试题,最后还把把技术点梳理成一份大而全的“Android高级工程师”面试xmind(实际上比预期多花了

m0_56175058的博客 1064

点云从入门到精通技术详解100篇-基于 CBCT 与口内扫描数据的牙齿点云配准

口扫生成的三维牙模型只包含牙冠结构,容易受到唾液、食物残留等杂质的干扰。像精度,但其扫描成本较高,在公立医院的普及率较低。此外,口扫探入式的体。完整、精确的牙齿信息,有助于医生更好地进行数字化辅助诊疗,提高手术的预。可以表示上颌骨、下颌骨、牙冠以及牙根的位置和形状,但其扫描分辨率较低,精配准前实现粗略的预配准来确定点云间的初始位置,为精配准提供良好的配准。该算法通过计算点对间的距离确定源点云中的某一点在目标点云中的对应。算两点之间的欧氏距离,运算量较大,而且由于算法只考虑点集间的距离而忽略。

getusushu的博客 1641

Android开发艺术探索——第四章View的工作原理

Android开发艺术探索——第四章View的工作原理4.1(一)初识ViewToot和DecorView基本概念   ViewRoot对应于ViewRootImpl类,是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完成后,会将DecorView添加到View中。同时,会

英勇青铜5 4617

SOUL.md 人格定制的 7 个高阶技巧:Hermes Agent 精准控制 AI 行为模式

揭示 SOUL.md 的本质是行为契约而非人格设定,介绍7个围绕边界约束的高阶技巧,包括用上下文锚点(INPUT SCOPE/OUTPUT TARGET/CONSTRAINTS)替代角色描述、动态渲染锚点适配CI流程等,显著降低token消耗与人工review耗时。

weixin_42520239的博客 252

【nerfStudio】1-在windows上安装nerfStudio

安装Git。安装Visual Studio 2022。在安装CUDA之前必须完成此步骤。必须在“桌面开发与C++”工作流程(在BuildTools版本中称为“C++构建工具”)中包含所需的组件。Nerfstudio要求。我们建议使用conda来管理依赖关系。在继续之前,请确保安装了Conda。 依赖关系 PyTorch 请注意,如果安装了低于2.0.1的PyTorch版本,则应卸载先前版本的pytorch、functorch和tiny-cuda-nn。 基于CUDA 11.8的Torch 2.0.1 安装基

dlhlSC的博客 1692

Android开发艺术探索笔记 第四章

Android开发艺术探索笔记 第四章View的工作原理基本概念 ViewRoot对英语ViewRootImpl类,他是连接WindowManager和DecorView的纽带 View的绘制流程是从ViewRoot的performTraversals方法开始的,该方法依次调用performMeasure,performLayout, performDraw。先进行顶级View的measure,la

我看到你们了 445

基于单片机的智能温控风扇设计

该智能温控风扇系统的设计目标是根据环境温度自动控制风扇的转速或开关状态,确保用户始终处于舒适的温度范围内。实时温度监测:通过温度传感器(如DS18B20或DHT22)实时监控环境温度。风扇控制:根据温度变化自动调节风扇的转速,温度过高时风扇加速,温度适中时风扇转速降低,达到节能与舒适平衡。LCD显示:通过LCD屏幕实时显示温度信息。无线通信:通过Wi-Fi或蓝牙模块将温度数据发送至手机或云平台,支持远程控制风扇的开关或调节转速。报警功能:温度过高或过低时,蜂鸣器发出警报,提示用户注意。

2201_76125393的博客 1162

View的工作原理 - Android开发艺术探索读书笔记(第四章)

View的工作原理知识准备ViewRoot ViewRoot对应ViewRootImpl类,是连接WindowManager与DecorView的纽带。 View的三大流程都是通过ViewRoot完成的。 ActivityThread中,Activity对象被回收时,会将DecorView添加到Window中,同时创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView

没有故事的A同学 978

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

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

《Android开发艺术探索》读书笔记 (4) 第4章 View的工作原理

《Android开发艺术探索》读书笔记 (4) 第4章 View的工作原理 本节和《Android群英传》中的第3章Android控件架构与自定义控件详解有关系,建议先阅读该章的总结    除了掌握View的三大流程外,View常见的回调方法也 需要熟练掌握的,比如构造方法,onTttach、onVisibilityChanged、onDetach等,自定义View的类型,有直接继承自View

539

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

《Android 开发艺术探索》读书笔记完整版

第一章 Activity的生命周期和启动模式 第二章 IPC机制 第三章 View的事件体系 第四章 View的工作原理 第五章 理解RemoteViews 第六章 Android的Drawable 第七章 Android动画深入分析 第八章 理解Window和WindowManager 第九章 四大组件的工作过程 第十章 Android的消息机制 第十一章 Androi...

JiandaoStudio 620

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

读书笔记——《Android 开发艺术探索》View的工作原理阅读笔记

View的工作原理阅读笔记初识ViewRoot和DecorViewDecorView的结构 初识ViewRoot和DecorView ViewRoot: 联系windowManager和Decorview的纽带,View的三大流程均通过ViewRoot完成 DecorView: 是Activity的顶级view。内部通常包含一个LinearLayout. 在ActivityThread的Appli...

蓝冷然的博客 374

Android开发艺术探索读书笔记(一)

首先向各位严重推荐主席这本书《Android开发艺术探索》。     再感谢主席邀请写这篇读书笔记 + 书评。书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书从内容到代码都梳理一遍,一方面方便自己总结,一方面也为主席宣传,如果你还在犹豫要不要入手这本书的时候,希望看完我的笔记,能激发你购买的动力。OK,言归正传,下面先简单写几句书评,本人技术有限,只是从自身

amurocrash的专栏 9618

《Android开发艺术探索》读书笔记

一、前言 花了几天整理完《Android进阶之光》的读书笔记,效果不是很满意,把以前零散整合成一片超长笔记,总感觉也不是那么好,决定接下来读书笔记还是拆开来,以后也好查找一点。 ...

soleil雪寂 606

Android开发艺术探索读书笔记

前言 Android开发艺术(这本书真的是艺术,太崇拜刚哥了,值得每一个做Android开发刷十遍的书)1,Activity生命周期和启动模式典型情况下的生命周期分析onCreate() onStart() onResume() onPause() onStop() onDestroy() onRestart()异常情况下的生命周期分析屏幕旋转onSaveInstanceState() onRes...

杨殿生的博客 428

《Android开发艺术探索》第4章-View的工作原理读书笔记

ViewRoot 对应于 ViewRootImpl 类,是连接 WindowManager 和 DecorView 的纽带。之所以这样说,是因为在 ViewRootImpl 的构造函数中初始化了 mWindowSession = WindowManagerGlobal.getWindowSession(); 对象,而在 ViewRootImpl 的 setView 方法中,先调用 requestLayout(),然后调用 mWindowSession 的 addToDisplay 方法...

willwaywang6 1261

《Android开发艺术探索》读书笔记--第4章 View的工作原理

文章目录

soleil雪寂 346

Android开发艺术探索笔记

《Android开发艺术探索》这本书在几年前就已经买了,陆陆续续看过几次,都没有看完,没有理解透。 最近重读《Android开发艺术探索》,读了两次,第一次读完感觉还有大量的知识点没有理解,再次阅读,练习书中例子,记读书笔记,理解加深了几分。 [学习笔记]Android开发艺术探索:Activity的生命周期和启动模式 [学习笔记]Android开发艺术探索:IPC机制 [学习笔记]A...

尘埃zza的博客 494

Android 开发艺术探索 读书笔记3

P137 第三章View的事件体系 3.1View的基础知识  1.View是Android中所有控件的基类  2.View的位置参数:top:左上角纵坐标;left:左上角横坐标;right:右下角横坐标;bottom:右下角纵坐标 3.MotionEvent和TouchSlop   (1)MotionEvent            ACTION_DOWN, ACTION

Dseai_的博客 434

View的工作原理(Android开发艺术探索读书笔记)

初识ViewRoot和DecorViewViewRoot对应ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot类完成的,在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorV

jaggie的专栏 410

Android 开发艺术探索 读书笔记4

第四章 View的工作原理 三大流程 测量流程(measure)、布局流程(layout)、绘制流程(draw)。 一,ViewRoot和DecorView     ViewRoot对应于ViewRootImpl类,他是连接windowManager和DecorView的纽带。     方法:performTraversals measure 决定了View宽和高getMeasu

Dseai_的博客 552
上一篇: 《Android开发艺术探索》读书笔记-第三章 View的事件体系
下一篇: 色彩天气APP-MVP初体验
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值