Android Framework AMS(03)AMS关键类解读

news2024/11/24 1:58:44

该系列文章总纲链接:专题总纲目录 Android Framework 总纲


本章关键点总结 & 说明:

说明:本章节主要涉AMS的关键类及其设计理念的解读,主要关注图中下方AMS关键类解读部分即可。这么做的目的是为了后面章节分析AMS时更容易理解其相关概念和相关流程。毕竟AMS涉及的关键类较多,直接看流程会导致很多地方不容易理解。

在Android系统中,AMS(ActivityManagerService)是Android系统中非常核心的服务,主要负责应用程序的管理和调度。以下是一些与AMS框架层代码相关的核心类,以及它们的简要介绍:

  1. ActivityManagerService (AMS): 这是Android系统中负责管理应用程序生命周期和进程调度的核心服务。它处理Activity、Service、Broadcast Receiver等组件的启动、切换和销毁,以及进程的管理和调度。

  2. ActivityStack: 用于管理任务栈,每个ActivityStack对应一个任务栈,存储应用程序的Activity实例,并维护它们的启动和切换顺序。

  3. ProcessRecord: 管理应用程序的进程,每个ProcessRecord对应一个应用程序的进程,存储包名、进程名、进程ID等信息,以及该进程中运行的Activity实例。

  4. TaskRecord: 管理应用程序的任务,每个TaskRecord对应一个应用程序的任务,维护Activity的启动顺序和切换顺序。

  5. ActivityStackSupervisor: 负责监督Activity栈的管理,包括启动新的Activity、处理Activity的切换和任务栈的调度。

  6. ActivityThread: 应用程序的入口点,负责创建应用程序的主线程,管理应用程序的运行时环境,包括上下文的创建和资源的加载。

  7. Instrumentation: 用于监控应用程序的生命周期,包括Activity的创建、启动和销毁。

  8. ActivityManagerNativeActivityManagerProxy: 这两个类实现了AMS的客户端和服务端的通信,通过Binder机制进行进程间通信。

  9. ActivityManager: 应用程序可以通过这个类与AMS进行交互,管理Activity的生命周期。

这些类共同构成了AMS框架的核心,它们协同工作,确保了Android系统中应用程序的正常运行和资源的有效管理。接下来将这些核心类以不同的职责来进行分类,便于后续更容易理解整个AMS的设计。

1 AMS核心类

1.1 AMS核心类的概念解读

  • ActivityManagerService (AMS):AMS是Android系统中负责管理应用程序生命周期和进程调度的核心服务。它处理Activity、Service、Broadcast Receiver等组件的启动、切换和销毁,以及进程的管理和调度。
  • ActivityStackSupervisor: 负责监督Activity栈的管理,包括启动新的Activity、处理Activity的切换和任务栈的调度。
  • ActivityTaskSupervisor:ActivityStackSupervisor的职责被ActivityTaskSupervisor所接管,负责监督和管理系统中所有的Activity任务。

1.2 AMS核心类的设计理念整体解读

ActivityManagerService (AMS)、ActivityStackSupervisor 和 ActivityTaskSupervisor 这几个类在 Android 系统中共同构成了应用程序管理和调度的核心架构。它们的设计理念可以概括为以下几点:

  • 集中管理:AMS 作为核心服务,集中管理应用程序的生命周期和进程调度,确保系统资源的合理分配和应用程序的稳定性。
  • 职责分离:AMS 处理广泛的管理任务,而 ActivityStackSupervisor 和 ActivityTaskSupervisor 专注于 Activity 的具体管理和调度,这种分离有助于提高代码的可维护性和扩展性。
  • 任务和栈的抽象:通过 ActivityStackSupervisor 和 ActivityTaskSupervisor,系统将 Activity 的组织和管理抽象化为任务和栈的概念,使得 Activity 的启动、切换和销毁更加有序和高效。
  • 用户界面的连贯性:这些类的设计确保了用户界面的连贯性和响应性,通过合理的任务栈管理,为用户提供了直观的导航体验。
  • 资源优化:AMS 和它的辅助类通过监控和调度应用程序的运行状态,优化系统资源的使用,如内存和 CPU,以提高整体性能。
  • 灵活性和扩展性:这种分层的设计允许 Android 系统灵活地添加新的组件和功能,同时保持现有系统的稳定性。
  • 安全性:AMS 通过控制应用程序的启动和运行,确保了应用程序之间的隔离和安全性。
  • 响应用户操作:ActivityStackSupervisor 和 ActivityTaskSupervisor 快速响应用户操作,如启动新 Activity 或返回到前一个 Activity,保证了用户操作的即时反馈。

1.3 AMS核心类的设计理念详细解读

1.3.1 ActivityManagerService (AMS) 的设计理念

ActivityManagerService (AMS) 是 Android 系统中负责管理应用程序生命周期和进程调度的核心服务。它的设计理念包括:

  • 统一管理:AMS 作为系统服务,统一管理所有应用程序的生命周期和进程调度,确保系统资源的合理分配和应用程序的稳定性。
  • 模块化设计:AMS 将不同的管理职责划分为多个模块,如 Activity、Service、Broadcast Receiver 等,使得系统更加模块化,便于维护和扩展。
  • 资源优化:AMS 通过监控和调度应用程序的运行状态,优化系统资源的使用,如内存和 CPU,以提高整体性能。
  • 安全性:AMS 控制应用程序的启动和运行,确保了应用程序之间的隔离和安全性。
  • 响应性:AMS 快速响应系统事件和用户操作,如启动新应用或切换应用,保证了系统响应的即时性。

1.3.2 ActivityStackSupervisor 的设计理念

ActivityStackSupervisor 负责监督 Activity 栈的管理,包括启动新的 Activity、处理 Activity 的切换和任务栈的调度。它的设计理念包括:

  • 任务抽象:将 Activity 的组织和管理抽象化为任务和栈的概念,使得 Activity 的启动、切换和销毁更加有序和高效。
  • 用户界面的连贯性:通过合理的任务栈管理,为用户提供了直观的导航体验。
  • 灵活性:支持多任务和多栈的管理,使得系统可以灵活地处理复杂的用户交互。
  • 响应用户操作:快速响应用户操作,如启动新 Activity 或返回到前一个 Activity,保证了用户操作的即时反馈。

1.3.3 ActivityTaskSupervisor 的设计理念

ActivityTaskSupervisor 在 Android 5.0 及以后的版本中接管了 ActivityStackSupervisor 的职责,负责监督和管理系统中所有的 Activity 任务。它的设计理念包括:

  1. 统一任务管理:统一管理所有 Activity 任务,简化了任务管理和调度的复杂性。

  2. 任务和栈的抽象:通过任务和栈的抽象,提供了一种更加清晰和高效的方式来组织和管理 Activity。

  3. 用户界面的连贯性:通过合理的任务管理,确保了用户界面的连贯性和响应性。

  4. 扩展性:支持新的组件类型和任务管理策略,使得系统可以灵活地扩展新的功能。

  5. 性能优化:通过优化任务调度和栈管理,提高了系统的性能和响应速度。

2 AMS任务和栈管理

ActivityStack 类在 AMS 中的作用是管理应用程序的 Activity 栈,维护 Activity 的启动顺序和状态,处理 Activity 的切换和任务栈的调度。TaskRecord 类在 AMS 中的作用是表示一个任务,记录和管理任务中 Activity 的启动顺序和历史记录,支持多任务和多栈的管理。接下来对这2个类分别进行解读。

2.1 ActivityStack 解读

2.1.1 ActivityStack 解读

ActivityStack 是 Android 系统中用于管理任务栈的数据结构。每个 ActivityStack 对应一个任务栈,它管理着多个 TaskRecord,这些任务栈代表了用户与应用交互的界面序列。ActivityStack 维护了任务的顺序,确保了用户可以通过按下返回键来正确地退出当前任务。

2.1.2 ActivityStack 类 设计理念

  • 任务管理ActivityStack 负责管理任务的生命周期和状态,包括任务的创建、切换和销毁。
  • 顺序维护:它保持了任务的启动顺序,使得用户界面的导航变得直观。
  • 响应用户操作:用户的操作(如按下返回键)会通过 ActivityStack 来响应,从而维护用户预期的体验。

2.2 TaskRecord 类解读

2.2.1 TaskRecord 解读

TaskRecord 代表了一个任务,它是 ActivityStack 的组成部分。每个 TaskRecord 包含了一系列的 ActivityRecord,这些记录代表了任务中的每一个活动。

2.2.2 TaskRecord 类 设计理念

  • 任务隔离:每个 TaskRecord 都是独立的,保证了任务之间的隔离性。
  • 后进先出(LIFO)TaskRecord 中的 ActivityRecord 遵循后进先出的原则,这与用户期望的返回操作行为一致。
  • 任务可识别:每个 TaskRecord 都有一个唯一的标识符,便于系统识别和管理。

ActivityStack 和 TaskRecord 共同构成了 Android 中任务管理和活动记录的基础设施。ActivityStack 作为任务的集合,管理着用户与应用的交互流程,而 TaskRecord 则记录了单个任务中的活动历史。这种设计使得 Android 能够有效地管理多任务和提供流畅的用户体验。

3 AMS进程和实例管理

ProcessRecord 类 和 ActivityRecord 类 在 Android 系统中扮演着重要的角色,它们是 ActivityManagerService (AMS) 用来管理应用程序和其组件的关键数据结构。接下来对其分别进行解读.

3.1 ProcessRecord 类解读

3.1.1 ProcessRecord 解读

ProcessRecord 是 AMS 中用来描述和管理每一个进程的数据结构。它包含了进程的详细信息,如进程ID(pid)、用户ID(uid)、进程名、进程的优先级、进程状态等。此外,它还关联了该进程中运行的所有组件,包括 Activity、Service、BroadcastReceiver 和 ContentProvider。

3.1.2 ProcessRecord 设计理念

  • 唯一标识:每个进程都有一个唯一的 ProcessRecord,无论它包含多少组件。
  • 生命周期管理:ProcessRecord 存储了进程的生命周期信息,AMS 通过这些信息来管理进程的启动、运行和销毁。
  • 资源调度:系统根据 ProcessRecord 中的优先级信息来调度 CPU 和内存资源。
  • 安全隔离:每个进程都是一个独立的沙箱,确保应用程序之间的安全隔离。

3.2 ActivityRecord 类解读

3.2.1 ActivityRecord 解读

ActivityRecord 是 AMS 用来跟踪和管理单个 Activity 的数据结构。它记录了 Activity 的详细信息,包括 Activity 的名字、Intent、启动模式、状态、关联的 Task(任务栈)等。

3.2.2 ActivityRecord ​​​​​​​类 设计理念

  • 组件管理:每个 Activity 组件在 AMS 中都有一个对应的 ActivityRecord,AMS 通过这些记录来管理 Activity 的生命周期。
  • 任务关联:ActivityRecord 与其所在的 Task(通过 TaskRecord 表示)有关联,这有助于管理系统中的任务栈。
  • 状态跟踪:ActivityRecord 跟踪 Activity 的状态变化,如初始化、运行中、暂停、停止等。
  • 历史记录:系统使用 ActivityRecord 来维护 Activity 的历史记录,这对于用户按下“返回”按钮时恢复之前的 Activity 非常重要。

ProcessRecord 和 ActivityRecord 共同支持 AMS 管理应用程序的进程和组件。ProcessRecord 作为进程的抽象,包含了运行在该进程下的所有组件的记录,而 ActivityRecord 则专注于单个 Activity 的管理。两者的设计都体现了 Android 系统对于组件生命周期和资源管理的细致考虑。

4 AMS应用程序运行时环境相关类解读

4.1 ActivityThread类解读

ActivityThread 是用程序的入口点,负责创建应用程序的主线程,管理应用程序的运行时环境,包括上下文的创建和资源的加载。

ActivityThread 类 是 Android 应用程序中非常核心的一个类,它代表了应用程序的主线线程,也就是 UI 线程。它的主要作用如下:

  • 主线程管理:ActivityThread 是 Android 应用的入口点,负责启动应用程序的主线程,即 UI 线程。这个线程负责处理所有 UI 事件和界面更新。
  • 生命周期管理:它管理着四大组件(Activity、Service、BroadcastReceiver、ContentProvider)的生命周期回调。当 AMS(ActivityManagerService)需要启动或停止这些组件时,它会通过 IPC(进程间通信)向对应的 ActivityThread 发送消息,由 ActivityThread 在主线程中执行相应的生命周期方法。
  • 消息循环:在 ActivityThread 的 main() 方法中,会准备主线程的 Looper,这样主线程就具备了消息循环的能力,可以处理各种系统和应用消息。
  • 资源管理:ActivityThread 负责加载和创建应用程序的资源,包括字符串、颜色、布局文件等。
  • IPC 通信:它通过内部类 ApplicationThread(实现了 IApplicationThread 接口)与 AMS 进行通信,接收 AMS 的指令来创建或销毁组件。

接下来解读ActivityThread 这个类的设计理念:

4.2 ActivityThread的设计理念

  • 单一职责:ActivityThread 专注于管理应用的主线线程和组件生命周期,保持了职责的单一性。
  • 解耦合:通过 Binder IPC 机制与 AMS 通信,使得应用进程与系统服务进程之间保持了解耦。
  • 封装性:ActivityThread 封装了主线线程的创建和消息循环的逻辑,对外提供统一的接口来管理组件生命周期。
  • 扩展性:通过内部类和消息机制,ActivityThread 可以灵活地扩展新的组件类型或者处理新的系统请求。
  • 性能优化:主线程负责 UI 渲染和事件处理,避免多线程操作 UI 导致的复杂性和性能开销。

Instrumentation 类 是 Android 应用程序的另一个重要类,它与 ActivityThread 紧密合作,用于监控和控制应用程序的组件行为。接下来主要介绍Instrumentation 类。

5 AMS生命周期监控相关类解读

5.1 Instrumentation 类解读

Instrumentation 类是Android框架中的一个核心类,用于监控和控制应用程序的生命周期和行为。它提供了一组API,允许开发者或者测试框架在应用程序运行时注入代码,监控应用程序的生命周期事件,如Activity的创建、销毁等,以及发送用户输入事件。

接下来解读Instrumentation 的设计理念和主要功能。

5.2 Instrumentation 类的设计理念和主要功能

Instrumentation 类的设计理念基于以下几个核心原则:

  • 透明性:Instrumentation 类可以监控应用程序的生命周期事件而不需要修改应用程序的代码,对应用程序来说是透明的。
  • 控制性:它允许测试代码控制应用程序的行为,例如强制启动一个Activity或发送模拟的用户输入。
  • 解耦:Instrumentation 类将测试代码与应用程序代码分离,使得测试代码可以独立于应用程序存在。
  • 灵活性:它提供了丰富的API来满足不同的测试需求,如性能测试、UI测试等。

Instrumentation 的主要功能解读如下:

  • 生命周期管理:通过 Instrumentation 类,可以在测试中控制Activity的生命周期,如调用 callActivityOnCreate(), callActivityOnDestroy() 等方法。
  • 事件分派:可以分派事件(如按键事件、触摸事件)到应用程序。
  • 性能监控:可以监控应用程序的性能,如CPU使用、内存分配等。
  • 测试结果报告:可以发送测试状态和结果报告。

5.3 Instrumentation杂项解读

Instrumentation 类常用于自动化测试,特别是UI测试。例如,AndroidJUnitRunner和Espresso测试框架在后台都使用了 Instrumentation 来执行测试用例。

Instrumentation 类通过在应用的生命周期方法之前和之后插入自定义的逻辑来工作。例如,它可以在 onCreate() 方法执行之前和之后添加代码,以监控或修改Activity的行为。

总之,Instrumentation 类是Android测试和监控的基石,它为开发者提供了一种强大的方式来控制和检查应用程序的行为,从而确保应用程序的质量。通过 Instrumentation,开发者可以在不修改应用程序代码的情况下,实现对应用程序的深入测试和分析。

6 AMS进程间通信相关类解读

6.1 AMS进程间通信相关类解读

关于进程间通信的类主要涉及的类包括:ActivityManagerNative、ActivityManagerProxy、ActivityManager。ActivityManagerNative 和 ActivityManagerProxy 是实现进程间通信(IPC)的关键类,它们利用Binder机制来完成客户端与服务端之间的数据交换。而ActivityManager提供了一组静态方法来与ActivityManagerService进行交互。详细解读如下:

  • ActivityManagerNative 是一个抽象类,继承自Binder并实现了IActivityManager接口。它作为服务端的本地实现,包含了AMS提供给客户端的所有方法。当客户端通过代理对象调用方法时,实际上是通过Binder机制调用了ActivityManagerNative中相应的onTransact方法来处理请求。
  • ActivityManagerProxy 是ActivityManagerNative的内部类,它作为客户端的代理,实现了IActivityManager接口。客户端通过ActivityManagerProxy实例来调用AMS的方法,这些调用会被封装成Binder事务并发送给服务端,即ActivityManagerService的实例。
  • ActivityManager提供了一组静态方法来与ActivityManagerService进行交互。它通过ActivityManagerNative的getDefault方法来获取一个代理实例,通过这个代理实例,应用程序可以请求启动Activity、获取运行中的服务列表等操作。

接下来解读进程间通信这几个类的设计理念:

6.2 AMS进程间通信的设计理念

这三个类的设计理念基于代理模式,其中ActivityManagerNative充当了实际服务的提供者,而ActivityManagerProxy则是客户端的代理,ActivityManager则是客户端通常直接交互的接口。这种设计模式允许客户端代码透明地与远程服务进行通信,而无需关心IPC的具体细节。

  1. 封装性:客户端通过ActivityManager与AMS进行交互,无需关心IPC的具体实现。
  2. 解耦:客户端和服务端的代码解耦,修改服务端实现不影响客户端。
  3. 扩展性:新增客户端或服务端功能时,不需要修改对方代码,只需要遵循相同的接口定义。

通过这种方式,Android系统能够灵活地管理应用程序的生命周期和调度,同时保持了代码的清晰和可维护性。

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

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

相关文章

基于SpringBoot+Vue+Uniapp家具购物小程序的设计与实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而…

MySql外键约束

数据库约束 对储存数据的约束,确保储存数据的准确性 not null(非空约束) 该行不能不存储值,null也不能default 默认约束当没有插入值时,该列就默认插入default给的值unique 唯一约束这个行的数据是唯一的prim…

Spark常用RDD算子:transformation转换算子以及action触发算子

文章目录 1. 算子(方法)介绍2. 常用transformation算子2.1 map 2.2 flatMap2.3 filter2.4 distinct2.6 groupBy2.7 sortBy()2.8 k-v数据[(k,v),(k1,v1)] 3. 常用action算子 1. 算子(方法)介绍 rdd中封装了各种算子方便进行计算&a…

传感器模块编程实践(四)舵机+MPU6050陀螺仪模块融合云台模型

文章目录 一.概要二.实验模型原理1.硬件连接原理框图2.控制原理 三.实验模型控制流程四.云台模型程序五.实验效果视频六.小结 一.概要 云台主要用来固定摄像头。准确地说,云台是一种可以多角度调节的支撑设备,类似于人的脖子可以支撑着脑袋,…

java随机生成数学算式

生成随机数学算式可谓是计算机领域的一个经典的问题, 本文使用JFrame,JButton,JTextField等java图形化工具,生成一个可以随机切换题目,可以实现计时功能的一个图形化界面 源代码展示 randomMath类 package login;import javax.swing.*; import java.awt.*; import java.awt.e…

uniapp 锁屏显示插件 Ba-LockShow(可让vue直接具备锁屏显示能力)

简介 Ba-LockShow 是一款可以直接使uniapp的vue界面在锁屏页展示的插件。 支持使vue直接具备锁屏显示能力支持设置锁屏显示和不显示支持唤醒屏幕 截图展示(仅参考) 支持定制、本地包、源码等,有建议和需要,请点击文章结尾“Unia…

【C++】常用数据结构纲要(简易版)

非静无以成学。——诸葛亮 数据结构概括 1、什么是数据结构呢?2、讲述过的结构2、1、前言2、2、树->二叉树->两种平衡二叉树2、3、单链表->双链表->带有哨兵位的链表 3、B树3、1、概念及图示3、2、B树数据处理3、2、1、查找3、2、2、插入 4、哈希表4、1…

不是 PHP 不行了,而是 MySQL 数据库扛不住啊

大多数的业务场景下 PHP 还没有达到性能瓶颈,然而 MySQL 数据库就先行驾崩了。但我们总是不分青红皂白,一股脑的把原因归结于是 PHP 语言不行了,每当遇到这种情形我就会感叹到 PHP 的命真苦啊。PHP 作为一门优秀的开源编程语言,在…

基于WebSocket实现简易即时通讯功能

代码实现 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifa…

C++(vector的实现)

1. vector介绍 vector本质其实就是和我们数据结构中的顺序表类似&#xff0c;都是对一个数组进行增删查改等操作&#xff0c;但是这里vector的实现和顺序表的实现有所不同&#xff0c;vector的底层源码的实现是通过三个迭代器实现的&#xff0c;一个是指向开始的位置_start&…

优化小企业财务,使用记账软件的好处解析

财务记账软件优化企业财务管理&#xff0c;支持开票、在线支付、费用分类、银行对账、工时项目管理、库存管理及税务合规&#xff0c;自动生成报表助企业决策&#xff0c;克服传统电子表格局限&#xff0c;支持企业持续健康发展。 使用财务记账软件的好处和优势 1、开票和计费…

10.pwn 中级ROP

ret2csu 什么是ret2csu&#xff1f; 这个其实就是在程序中一般都会有一段万能的控制参数的gadgets&#xff0c;里面可以控制rbx,rbp,r12,r13,r14,r15以及rdx,rsi,edi的值&#xff0c;并且还可以call我们指定的地址。然后劫持程序执行流的时候&#xff0c;劫持到这个__libc_cs…

seL4 Faults(八)

Faults 学习什么是线程错误理解线程错误和处理器硬件错误是不同的理解什么是错误处理器理解内核对于一个有错误的线程做了什么了解如何设置内核将在其上传递故障消息的端点&#xff08;master与 MCS&#xff09;。在错误故障后学习如何恢复线程。 Background: What is a faul…

(21)Nakagami-m分布及其参数的意义

文章目录 前言一、Nakagami衰落的定义二、Nakagami衰落的形状参数m三、Nakagami衰落的尺度参数ω四、Nakagami随机变量的生成 前言 在无线信道中&#xff0c;由于电波的多径传播效应&#xff0c;接收到的信号强度会因为多条传播路径的相长或相消而发生起伏变化。这种现象被称为…

mysql迁移到达梦数据库报错:参数不兼容

1: 这个错误可能是某个字段‘定义超长’&#xff0c;尝试&#xff1a; 2: 如果还报错&#xff0c;指定和mysql同版本驱动

树状数组——学习心得

可以解决大部分区间上面的修改以及查询的问题&#xff0c;例如1.单点修改&#xff0c;单点查询&#xff0c;2.区间修改&#xff0c;单点查询&#xff0c;3.区间查询&#xff0c;区间修改&#xff0c;换言之&#xff0c;线段树能解决的问题&#xff0c;树状数组大部分也可以&…

全栈开发笔记

1.后端没问题 前端不显示返回数据&#xff1f; 返回数据被&#xff0c;axios拦截器拦截了 2.路径跳转显示空白&#xff1f; 没有配置router 3.后端部署到服务器上 无法通过外网访问接口&#xff1f; 检查服务器防火墙设置 即使服务监听正确&#xff0c;服务器本身的防火墙也可能…

【工作流引擎集成】springboot+Vue+activiti+mysql带工作流集成系统,直接用于业务开发,流程设计,工作流审批,会签

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

前端_002_CSS扫盲

文章目录 概念选择器常用属性背景边框高度和宽度颜色文本字体链接表格里对齐显示相关溢出&#xff0c;滚动条属性 伪类和伪元素 概念 1.书写格式&#xff1a; 选择器{ 属性名:属性值 ; 属性名:属性值 ; } 2.文件后缀.css 选择器 元素选择器 [tag] id选择器 #[id_name] c…

西门子S7-SMART运动控制向导

打开“运动控制”向导&#xff0c;“工具”->“向导”->“运动控制” 图 1.打开“运动控制”向导 选择需要配置的轴 图 2.选择需要配置的轴 为所选择的轴命名 图 3.为所选择的轴命名 输入系统的测量系统&#xff08;“工程量”或者“脉冲数/转”&#xff…