当前位置: 首页 > news >正文

Linux之VFS

一、概述

Linux之VFS

1.1 VFS简介

Linux支持多种不同文件系统,要实现这个目的,就要将对各种不同文件系统和管理纳 入到一个统一的框架中,让内核中的文件系统界面成为一条文件系统“总线”,使用户程序 可以通过同一个文件系统操作界面,也就是同一组系统调用,对各种不同的文件系统(以及 文件)进行操作。

虚拟文件系统(Virtual File System,简称VFS)是Linux内核的子系统之一,它为用户程序提供文件和文件系统操作的统一接口,屏蔽不同文件系统的差异和操作细节。借助VFS可以直接使用open()read()write()这样的系统调用操作文件,而无须考虑具体的文件系统和实际的存储介质。虚拟文件系统不是磁盘文件的组织格式,而是抽象出来的文件树的集合,可以通过api,动态的向其中增加或移除对应的目录。

举个例子,Linux用户程序可以通过read() 来读取ext3NFSXFS等文件系统的文件,也可以读取存储在SSDHDD等不同存储介质的文件,无须考虑不同文件系统或者不同存储介质的差异。

通过VFS系统,Linux提供了通用的系统调用,可以跨越不同文件系统和介质之间执行,极大简化了用户访问不同文件系统的过程。另一方面,新的文件系统、新类型的存储介质,可以无须编译的情况下,动态加载到Linux中。

"一切皆文件"是Linux的基本哲学之一,不仅是普通的文件,包括目录、字符设备、块设备、套接字等,都可以以文件的方式被对待。实现这一行为的基础,正是Linux的虚拟文件系统机制。

1.2 VFS原理

VFS之所以能够衔接各种各样的文件系统,是因为它抽象了一个通用的文件系统模型,定义了通用文件系统都支持的、概念上的接口。新的文件系统只要支持并实现这些接口,并注册到Linux内核中,即可安装和使用。

举个例子,比如Linux写一个文件:

int ret = write(fd, buf, len);

调用了write()系统调用,它的过程简要如下:

  • 首先,勾起VFS通用系统调用sys_write()处理。
  • 接着,sys_write()根据fd找到所在的文件系统提供的写操作函数,比如op_write()
  • 最后,调用op_write()实际的把数据写入到文件中。

操作示意图如下:

二、虚拟文件系统组成部分

1. 基于磁盘的文件系统

管理本地磁盘和模拟磁盘的设备
Linux的Ext2、Ext3和ReiserFS 
Unix文件系统的变种,如sysv、UFS、MINIX和VERITAS VxFS。 
微软的文件系统,如MS-DOS、VFAT、NTFS 
ISO9660 CD-ROM文件系统和UDF(Universal Disk Format)DVD文 件系统 
其他文件系统如IBM OS/2中的HPFS、Apple’s Macintosh的HFS、AFFS 和ADFS等。

2. 网络文件系统

它允许方便访问网络上其他计算机的文件系统。VFS支持的网络文件系统有 NFS、Coda、AFS(Andrew filesystem)、CIFS(Common Internet Filesystem) 和NCP(Novell’s NetWare Core Protocol)。

3. 特殊文件系统

它不管理磁盘空间,/proc就是一个特殊的文件系统。

æµè°Linuxèææ件系ç»

Linux为了实现这种VFS系统,采用面向对象的设计思路,主要抽象了四种对象类型:

虚拟文件系统有四个主要对象类型: 
(1)superblock 表示特定加载的文件系统。 
(2)inode 表示特定的文件。 
(3)dentry 表示一个目录项,路径的一个组成部分。 
(4)file 表示进程打开的一个文件。

每个对象都包含一组操作方法,用于操作相应的文件系统。

备注:Linux将目录当做文件对象来处理,是另一种形式的文件,它里面包含了一个或多个目录项。而目录项是单独抽象的对象,主要包括文件名和索引节点号。因为目录是可以层层嵌套,以形成文件路径,而路径中的每一部分,其实就是目录项。

接下来介绍一下各个对象的作用以及相关操作。

2.1 超级块

超级块用于存储文件系统的元信息,由super_block结构体表示,定义在<linux/fs.h>中,元信息里面包含文件系统的基本属性信息,比如有:

  • 索引节点信息
  • 挂载的标志
  • 操作方法 s_op
  • 安装权限
  • 文件系统类型、大小、区块数
  • 等等等等

其中操作方法 s_op 对每个文件系统来说,是非常重要的,它指向该超级块的操作函数表,包含一系列操作方法的实现,这些方法有:

  • 分配inode
  • 销毁inode
  • 读、写inode
  • 文件同步
  • 等等

当VFS需要对超级块进行操作时,首先要在超级块的操作方法 s_op 中,找到对应的操作方法后再执行。比如文件系统要写自己的超级块:

superblock->s_op->write_supper(sb);

创建文件系统时,其实就是往存储介质的特定位置,写入超级块信息;而卸载文件系统时,由VFS调用释放超级块。

Linux支持众多不同的文件系统,file_system_type结构体用于描述每种文件系统的功能和行为,包括:

  • 名称、类型等
  • 超级块对象链表

当向内核注册新的文件系统时,其实是将file_system_type对象实例化,然后加入到Linux的根文件系统的目录树结构上。

2.2 索引

索引节点对象包含Linux内核在操作文件、目录时,所需要的全部信息,这些信息由inode结构体来描述,定义在<linux/fs.h>中,主要包含:

  • 超级块相关信息
  • 目录相关信息
  • 文件大小、访问时间、权限相关信息
  • 引用计数
  • 等等

一个索引节点inode代表文件系统中的一个文件,只有当文件被访问时,才在内存中创建索引节点。与超级块类似的是,索引节点对象也提供了许多操作接口,供VFS系统使用,这些接口包括:

  • create(): 创建新的索引节点(创建新的文件)
  • link(): 创建硬链接
  • symlink(): 创建符号链接。
  • mkdir(): 创建新的目录。

等等,我们常规的文件操作,都能在索引节点中找到相应的操作接口。

2.3 目录项

前面提到VFS把目录当做文件对待,比如/usr/bin/vimusrbinvim都是文件,不过vim是一个普通文件,usrbin都是目录文件,都是由索引节点对象标识。

由于VFS会经常的执行目录相关的操作,比如切换到某个目录、路径名的查找等等,为了提高这个过程的效率,VFS引入了目录项的概念。一个路径的组成部分,不管是目录还是普通文件,都是一个目录项对象。/usrbinvim都对应一个目录项对象。不过目录项对象没有对应的磁盘数据结构,是VFS在遍历路径的过程中,将它们逐个解析成目录项对象。

目录项由dentry结构体标识,定义在<linux/dcache.h>中,主要包含:

  • 父目录项对象地址
  • 子目录项链表
  • 目录关联的索引节点对象
  • 目录项操作指针
  • 等等

目录项有三种状态:

  • 被使用:该目录项指向一个有效的索引节点,并有一个或多个使用者,不能被丢弃。
  • 未被使用:也对应一个有效的索引节点,但VFS还未使用,被保留在缓存中。如果要回收内存的话,可以撤销未使用的目录项。
  • 负状态:没有对应有效的索引节点,因为索引节点被删除了,或者路径不正确,但是目录项仍被保留了。

将整个文件系统的目录结构解析成目录项,是一件费力的工作,为了节省VFS操作目录项的成本,内核会将目录项缓存起来。

2.4 文件

文件对象是进程打开的文件在内存中的实例。Linux用户程序可以通过open()系统调用来打开一个文件,通过close()系统调用来关闭一个文件。由于多个进程可以同时打开和操作同一个文件,所以同一个文件,在内存中也存在多个对应的文件对象,但对应的索引节点和目录项是唯一的。

文件对象由file结构体表示,定义在<linux/fs.h>中,主要包含:

  • 文件操作方法
  • 文件对象的引用计数
  • 文件指针的偏移
  • 打开文件时的读写标识
  • 等等等等

类似于目录项,文件对象也没有实际的磁盘数据,只有当进程打开文件时,才会在内存中产生一个文件对象。

每个进程都有自己打开的一组文件,由file_struct结构体标识,该结构体由进程描述符中的files字段指向。主要包括:

  • fdt
  • fd_array[NR_OPEN_DEFAULT]
  • 引用计数

fd_array数组指针指向已打开的文件对象,如果打开的文件对象个数 > NR_OPEN_DEFAULT,内核会分配一个新数组,并将 fdt 指向该数组。

除此之外,内核还为所有打开文件维持一张文件表,包括:

  • 文件状态标志
  • 文件偏移量

关于多进程打开同一文件以及文件共享更详细的信息,可以阅读《UNIX环境高级编程》第三章。

3. 总结

Linux支持了很多种类的文件系统,包含本地文件系统ext3ext4到网络文件系统NFSHDFS等,VFS系统屏蔽了不同文件系统的操作差异和实现细节,提供了统一的实现框架,也提供了标准的操作接口,这大大降低了操作文件和接入新文件系统的难度。

4. 参考

  • 深入理解Linux内核
  • Linux内核设计与实现
  • 浅谈Linux虚拟文件系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-34997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

树和二叉树——数据结构 (严蔚敏C语言版)

1.树 1.1树的定义 树(Tree)是n(n≥0&#xff09;个结点的有限集&#xff0c;它或为空树(n0);或为非空树&#xff0c;对于非空树T: (1&#xff09;有且仅有一个称之为根的结点;(2&#xff09;除根结点以外的其余结点可分为m (m>0)个互不相交的有限集T1, T2,…,Tm&#xff…...

cartographer_ros node (三)

上一次我们详细讲述了node_main中对应的开始轨迹的函数StartTrajectoryWithDefaultTopics&#xff0c;这次我们主要讲解在结束SLAM之后调用的node类中的两个函数FinishAllTrajectories和RunFinalOptimization() 首先是FinishAllTrajectories&#xff0c;这个函数用于结束所有处…...

知乎热议:当代程序员应该去银行上班吗?一个985妹子用亲身经历告诉你们答案

前言 还愿邮储总行&#xff0c;写一下2020届秋招笔经面经&#xff0c;因为我主攻的国企&#xff08;银行和运营商&#xff09;&#xff0c;想去互联网的可以关掉啦 主要涉及邮储总行&#xff0c;浦发银行&#xff0c;农行&#xff0c;招商银行&#xff0c;成都银行&#xff0…...

锋迷商城SpringCloud+Vue前后端分离2021微服务实战

锋迷商城项目是一个B2C商城&#xff0c;基于SpringCloud构建的大型千万级高并发电商系统。采用当下最主流的微服务分布式架构&#xff0c;前后端分离技术&#xff0c; 涵盖技术栈有&#xff1a;Vue、axios、Springboot、RESTful、mybatis、tkmapper、Swagger、任务调度Quartz/…...

Redis对象类型编码(补充内存篇)

欢迎大家观看之前的Redis系列文章 Redis安装和配置&#xff08;Windows和Linux&#xff09;Redis原来不止五种类型啊&#xff08;含常用命令&#xff09; Redis内存模型原来是这样的啊&#xff01; Redis对象类型编码&#xff08;补充内存篇&#xff09; 深入学习Redis持久化&a…...

atcoder arc 122 a~b题Many Formulae、Insurance

A题链接 题目大意&#xff1a;不能存在两个及两个以上的减号&#xff0c;所有满足条件的式子之和。 题目思路&#xff1a;当时考试想到一半&#xff0c;就感觉编码能力不太会&#xff0c;然后就没做&#xff0c; 首先我们定义dp[N][2]&#xff0c;这种选或不选的问题&#xff0…...

数据库课程设计 大学生综合管理系统

问题描述&#xff1a; 设计并开发一套完整的在校大学生学习的综合管理系统&#xff0c;其中可包括以下几个模块&#xff1a; &#xff08;一&#xff09;选课管理&#xff1a;该系统包括教师、学生、系、课程和教室等信息&#xff0c;基本情况如下&#xff1a; 教师有工作证号…...

No qualifying bean of type ‘com.kkb.dao.*Mapper‘ available

没有查找到 *mapper对象程序报错没有查找到 mapper对象 可能造成的原因&#xff1a;缺少相应的注解 在SpringBoot的启动类中缺少 MapperScan SpringBootApplication MapperScan("com.yhp.dao") public class Application {public static void main(String[] args) …...

java程序员日常工作内容,Java面试题及解析

目录 Kafka的基本介绍Kafka的设计原理分析Kafka数据传输的事务特点Kafka消息存储格式副本&#xff08;replication&#xff09;策略Kafka消息分组&#xff0c;消息消费原理Kafak顺序写入与数据读取消费者&#xff08;读取数据&#xff09; Kafka的基本介绍 Kafka是最初由Lin…...

常用网络数据包丢失的分析与处理

网络管理维护过程中&#xff0c;经常会遇到数据包丢失的情况。用Ping命令进行连接测试&#xff0c;会发现Ping包的延迟远远超过正常值&#xff0c;甚至无法到达&#xff0c;同时伴随着网络服务应用的障碍&#xff0c;比如打开网站的速度太慢&#xff0c;严重时甚至无法打开网页…...

2021-06-23 SpringCloud Zuul网关filter添加或修改传递的参数

场景&#xff1a;通过网关转发服务到具体的ip地址 比如网关验证accessToken&#xff0c;需要拦截访问&#xff0c;然后在url中添加参数&#xff0c;如下 //1、这个是原来的参数数据 String accessToken request.getParameter("accessToken"); //2、转换后的数据 S…...

面试笔试题

1.src和href的区别 &#xff1f; 答:src用于替代当前的元素&#xff0c;而href用于建立这个标签与外部资源之间的关系。 href 是Hypertext Reference的简写&#xff0c;表示超文本引用&#xff0c;指向网络资源所在位置。 常用场景: <a href"http://www.baidu.com&…...

MySQL下载及配置过程

MySQL下载及配置过程 下载&#xff08;Windows&#xff09; 下载地址 https://dev.mysql.com/downloads/mysql/ 进入后的界面&#xff0c;点击Download下载。 点击Download进入此界面&#xff0c;点击标注的地方直接下载。 配置 这里只介绍 .zip 格式。 .zip格式不需要…...

DQL查询数据(最重点)

4、DQL查询数据&#xff08;最重点&#xff09; 4.1、DQL &#xff08;Data query Language&#xff1a;数据查询语言&#xff09; 所有的查询操作都用它 Select简单的查询&#xff0c;复杂的查询它都能做数据库中最核心的语言&#xff0c;最重要的语句使用频率最高的语句 …...

Redis之三种特殊数据类型

该笔记大部分搬运B站遇见狂神说的Redis&#xff0c;顺便把图文合并记录&#xff0c;便于回顾&#xff0c;仅用于学习&#xff01; 视频地址&#xff1a;https://www.bilibili.com/video/BV1S54y1R7SB?t250 作者真的非常好&#xff0c;记得三连 如有侵权&#xff0c;请联系删除…...

面向对象 实验4

实验四 对象作为数据成员 1 实验目的 学习对象作为类的数据成员的使用方法&#xff0c;学习对象数据成员的初始化以及“成员初始化器”的使用方法。 2 实验内容 2.1 使用Date类&#xff0c;定义Employee类 问题描述 在《实验三 面向对象初步》中&#xff0c;设计了日期类…...

闭关5个月,终于把这篇阿里P8大牛的数据结构与算法领悟明白!!以入阿里!!

数据结构是计算机科学与技术专业非常重要的-一门核心基础课&#xff0c;计算机科学各个领域及各种应用软件都要使用相关的数据结构和算法。 经历过校招的人都知道&#xff0c;算法和数据结构都是不可避免的。像拼多多、头条这种大公司&#xff0c;上来就来几道算法题&#xff…...

安卓按键响应的方式

一、在xml中设置按键的onClick绑定的函数 在页面显示两个按钮,用onClick 绑定buttonBeClicked函数&#xff0c;该函数在MainActivity.java中实现。 activity.main.xml: <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools…...

实战篇:sdram+fifo调试

本片主要总结SDRAM的FIFO优化仿真中出现的问题及解析。 针对下图的疑问点&#xff1a; 1.图中第一处&#xff0c;SDRAM的数据线在写FIFO往SDRAM写的过程中位高阻态&#xff0c;但实际应该是wr_data才对。为何&#xff1f; 在代码中&#xff0c;关于DQ以及ADDR的PIN定义没有位…...

组队学习:学习者参考手册

学习者参考手册 作为希望参与组队学习活动的学习者&#xff0c;一定想了解有关本次活动的各种环节。我就通过这份手册来给大家介绍一下。 本手册一共分为四个部分&#xff0c;分别是活动角色划分&#xff0c;活动流程介绍、打卡环节介绍、角色职责介绍。 1. 大航海模型 航路…...

408数据结构I 数据结构的基本概念

数据结构的基本概念 数据 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合&#xff0c;数据是计算机程序加工的原料。 数据元素 是数据的基本单位&#xff0c;通常作为一个整体进行考虑和处理。 数…...

Hive-常用调优手段

企业级调优 执行计划(Explain) 基本语法 EXPLAIN [EXTENDED | DEPENDENCY | AUTHORIZATION] query案例实操 (1)查看下面这条语句的执行计划 没有生成 MR 任务的 hive (default)> explain select * from emp; OK Explain STAGE DEPENDENCIES:Stage-0 is a root stage …...

frp内网穿透工具使用方法

frp内网穿透工具使用方法通过 SSH 访问局域网中的计算机本文翻译自https://github.com/fatedier/frp使用示例部分&#xff0c;同时有部分内容由本文作者添加或修改。 首先&#xff0c;根据自己的操作系统和架构从Release页面下载最新的压缩包。 # 解压命令 tar -zxvf frp_0.37…...

增长黑客——如何低成本实现爆发式成长

理论篇 时代背景 从蛮荒时代到个人流量时代 蛮荒时代 流量时代 个人流量时代 媒介 电视、报纸、广播、电脑 手机、电脑 手机为主、电脑 触点 静态触点&#xff08;只可进行单向的信息输出/输出&#xff09; 交互触点为主部分人类触点 人类触点为主交互触点 信息传…...

C#窗口与窗口数据传输

public partial class MeasureForm : BaseForm{public Action<dataClass> ReceiveData;} 1.窗口类中增加一个委托方法。 MeasureForm form new MeasureForm ();form.ReceiveData (data) >{//操作代码 &#xff08;如果需要使用窗口控件&#xff0c;需要使用 this.…...

解决linux buffer/cache 消耗内存过高引发的问题

解决linux buffer/cache 消耗内存过高引发的问题参考文章&#xff1a; &#xff08;1&#xff09;解决linux buffer/cache 消耗内存过高引发的问题 &#xff08;2&#xff09;https://www.cnblogs.com/kevinslee/p/7055979.html 备忘一下。...

JS 异步解决方案的发展历程以及优缺点。

回调函数 优点&#xff1a;解决了同步的问题&#xff08;整体任务执行时长&#xff09;&#xff1b; 缺点&#xff1a;回调地狱&#xff0c;不能用 try catch 捕获错误&#xff0c;不能 return; Promise 优点&#xff1a;解决了回调地狱的问题&#xff1b; 缺点&#xff1…...

leetcode 1646

#define MAX(x,y) (x>y?x:y) int getMaximumGenerated(int n){if(n0)return 0;if(n1)return 1;int maxx-1;int f[n1];f[0]0;f[1]1;for(int i2;i<n;i){f[i]f[i/2](i&1)*f[i/21];maxxMAX(maxx,f[i]);}return maxx; }...

python图像光谱视觉分析库-imgvision

imgvision-0.0.5 该库主要针对图像色彩视觉以及光谱分析完成功能性操作。它可能会帮助你将一张高光谱图像快速轻松的转换成sRGB, AdobeRGB&#xff0c;CIE1964 XYZ空间的图像。也可以对任意图像进行下采样操作。除此之外&#xff0c;该库还提供了RGB空间与HSV空间互转功能&…...

那人的那时

那时今天是2021年8.23号&#xff0c;距离考研还有一百多天&#xff0c;不知道未来的生活&#xff0c;对未来依旧充满了未知。"黑云压城城欲摧"&#xff0c;这或许就是我此时的心境吧。还没有考虑过自己的未来&#xff0c;但感到危机就在身边。学业&#xff0c;就业&a…...

CentOS-7-x86_64-DVD-1503-01安装盘中Package包中的 软件

2015/03/14 07:35 1,712,492 389-ds-base-1.3.3.1-13.el7.x86_64.rpm2015/03/14 07:35 612,292 389-ds-base-libs-1.3.3.1-13.el7.x86_64.rpm2014/07/04 00:32 100,096 abattis-cantarell-fonts-...

b站 bilibili 黑马Kubernetes 教程

Kubernetes详细教程 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&am…...

常用软件1-pycharm的安装教程

PyCharm 是一款功能强大的 Python 编辑器&#xff0c;具有跨平台性&#xff0c;鉴于目前最新版 PyCharm 使用教程较少&#xff0c;为了节约时间&#xff0c;来介绍一下 PyCharm 在 Windows下是如何安装的。 这是 PyCharm 的下载地址&#xff1a;http://www.jetbrains.com/pych…...

Android View的绘制流程简述 Android自定义View(一)

1 Android的UI管理系统层级关系 如上图所示&#xff0c;这就是Android的UI管理系统的层级关系。 1.1 当一个应用启动的时候&#xff0c;会启动一个主Activity&#xff0c;然后Activity会创建出一个窗口系统PhoneWindow(每个Activity都会创建&#xff0c;是Android系统中最基本…...

Android界面绘制流程

1.ViewRoot ViewRoot是连接WindowManager与DecorView的纽带&#xff0c;View的整个绘制流程的三大步&#xff08;measure、layout、draw&#xff09;都是通过ViewRoot完成的。当Activity对象被创建完毕后&#xff0c;会将DecorView添加到Window中&#xff08;Window是对窗口的…...

通过流程图来分析Android事件分发

写在前面 距离前一次写博客&#xff0c;已经过去接近一年&#xff0c;回想起来这一年确实很忙&#xff0c;否则不会连写博客都耽误了。然而忙归忙&#xff0c;也并没有停下学习的脚步&#xff0c;趁着今天有时间&#xff0c;把最近学习并实践于项目当中的知识点给梳理了&#…...

Android性能优化一绘制原理分析

Android应用启动慢&#xff0c;使用时经常卡顿&#xff0c;是非常影响用户体验的&#xff0c;应该尽量避免出现。 1.卡顿的分类 按照场景分可以分为&#xff1a; UI绘制 绘制刷新 应用启动 安装启动冷启动热启动 页面跳转 页面间切换前后台切换 事件响应 按键系统事件滑动 …...

Android-View绘制流程浅析

引 这段时间学习了下View的绘制流程&#xff0c;本着好记性不如烂笔头的原则&#xff0c;尝试将这些内容记录下来&#xff0c;用于巩固和总结。 这次学习的源码是基于Android SDK25来学习的&#xff0c;相比于之前版本的源码有了些许改变。 对于部分代码的功能和作用没有专门…...

PlantUML(程序员绘制流程图专用工具)

原文地址为&#xff1a; PlantUML&#xff08;程序员绘制流程图专用工具&#xff09;什么是 PlantUML PlantUML 是一个画图脚本语言&#xff0c;用它可以快速地画出&#xff1a; 时序图流程图用例图状态图组件图简单地讲&#xff0c;我们使用 visio 画图时需要一个一个图去画&a…...

浅析Android的绘制流程以及自定义流式布局实战

文章目录Android View的绘制流程以及自定义流式布局实战起点WindowPhoneWindow的创建DecorView的创建绘制的开始measurelayoutdrawStep 1, 绘制背景Step 3, 绘制自己Step 4, 绘制子view实战自定义View的构造onMeasureonLayoutgetWidth&#xff0c;getMeasuredWidth的区别最终效…...

Android中View的绘制流程

Android中View的绘制流程 一、 摘要 介绍Android中View的绘制流程&#xff0c;以及更新视图的两种方法&#xff1a;invalidate和requestLayout。 二、 ViewRootImpl 1. ViewRootImpl是什么 在API文档中如此描述ViewRootImpl&#xff1a; /*** The top of a view hierarchy…...

Android View 绘制流程总结

整理了一下 Android 上 View 绘制的流程&#xff0c;绘制流程图如下&#xff1a;...

Android之View的绘制流程解析

转载请标明出处:【顾林海的博客】 个人开发的微信小程序&#xff0c;目前功能是书籍推荐&#xff0c;后续会完善一些新功能&#xff0c;希望大家多多支持&#xff01; ##前言 自定义View在Android中占据着非常重要的地位&#xff0c;因此了解View的绘制流程对自定义View来说尤…...

Android中View绘制流程浅析

一个View&#xff0c;从无到有会走三个流程&#xff0c;也就是老生常谈的measure,layout,draw三流程; 我们都知道Android视图是由一层一层构成的层级结构&#xff0c;直白点说&#xff0c;就是父View包含子View而子View又可以包含子View。所以绘制流程是由最外层的View开始&am…...

android view 绘制过程,深入理解Android中View绘制的三大流程

前言最近对Android中View的绘制机制有了一些新的认识&#xff0c;所以想记录下来并分享给大家。View的工作流程主要是指measure、layout、draw这三大流程&#xff0c;即测量、布局和绘制&#xff0c;其中measure确定View的测量宽高&#xff0c;layout根据测量的宽高确定View在其…...

Android:从绘制一张流程图来体验View的自定义过程(一)

概述 自定义View向来不是一个轻松的话题。虽然对于android原生开发而言&#xff0c;这只能算是一项基本的技能&#xff0c;但真正当我们拿到一份需要我们自定义去实现的需求的时候&#xff0c;多少还会有点手足无措。具体是什么原因&#xff0c;我也不知道&#xff0c;也许&…...

【Android面试】View的绘制流程

目录View的绘制流程简介Activity和window和view 的关系Activity和Window是什么时候建立联系的呢&#xff1f;ViewRootImplView的绘制流程总结View的绘制流程简介 view的绘制流程主要为measure&#xff0c;layout&#xff0c;draw三个阶段 View与window的逻辑结构 对应于ViewR…...

Android View 绘制流程之三:draw绘制

Android View 绘制流程之三&#xff1a;draw绘制一.draw方法的整体流程二.drawBackground实现三.onDraw四.dispatchDraw的实现五.ScrollBar的绘制系列文章&#xff1a; Android View 绘制流程之一&#xff1a;measure测量 Android View 绘制流程之二&#xff1a;layout布局 And…...

PlantUML画类图、流程图、时序图使用详解

程序员难免要经常画流程图&#xff0c;状态图&#xff0c;时序图等。以前经常用 visio 画&#xff0c;经常为矩形画多大&#xff0c;摆放在哪等问题费脑筋。有时候修改文字后&#xff0c;为了较好的显示效果不得不再去修改图形。今天介绍的工具是如何使用 PlantUML 的插件画流程…...

Android WMS及绘制流程

主角&#xff1a;ViewRootImpl、Choreographer、Surfaceflinfer WMS扮演了什么角色? 作为协调者&#xff0c;协调view布局&#xff0c;绘制&#xff1b; 在ActivityThread中创建Actiivty后&#xff0c;调用activity.attach()时&#xff0c;创建一个窗体对象PhoneWindowPhone…...