news 2026/6/8 3:17:44

第二板块:Android 四大组件标准化学理 | 第六篇:四大组件架构总论与 Manifest 规范

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第二板块:Android 四大组件标准化学理 | 第六篇:四大组件架构总论与 Manifest 规范

第二板块:Android 四大组件标准化学理 | 第六篇:四大组件架构总论与 Manifest 规范

所属板块:第二板块 — Android 四大组件标准化学理

前置知识:第一板块中的 Context 体系、Binder IPC 机制、Zygote 进程孵化

本篇定位:从 Android 系统设计者的视角,解析四大组件(Activity、Service、BroadcastReceiver、ContentProvider)的架构总纲Manifest 注册规范。我们将深入探讨组件如何被系统发现、如何被调度、以及它们之间的进程间通信(IPC)边界。全程无业务实现、无生命周期回调用法、无性能优化建议,仅保留 Android Framework 的底层定义与系统级契约。


1. 核心结论先行

Android 四大组件是 Android 操作系统的应用级构建块(Application Building Blocks)。它们不是普通的 Java 对象,而是由系统服务(System Server)托管的特殊实体

  • 组件的本质:一个声明式入口。应用进程本身不主动创建组件,而是向系统(PMS/AMS)声明“我能处理什么”,系统再根据需要在合适的时机实例化这些组件。
  • Manifest 的本质:一个全局注册表。它告诉系统:这个 APK 包含哪些组件、需要哪些权限、运行在哪个进程、以及具备什么能力。
  • 调度中心ActivityManagerService (AMS)是所有组件调度的中枢,它通过 Binder 与应用的ApplicationThread通信,指挥应用进程创建或销毁组件。

2. 四大组件架构总论

2.1 组件分类与特性对比

组件类型核心职责是否常驻是否独立进程核心系统服务
Activity用户界面交互否(前台可见时存活)可配置ActivityManagerService
Service后台逻辑执行是(除非被回收)可配置ActivityManagerService
BroadcastReceiver系统/应用事件广播否(瞬时执行)否(默认宿主进程)ActivityManagerService
ContentProvider数据共享与访问是(进程启动时加载)可配置ActivityManagerService / PackageManagerService

2.2 组件实例化模型

四大组件均遵循被动实例化模型:

组件实例 (Activity/Service等)应用进程 (Zygote Fork)Android System (AMS/PMS)组件实例 (Activity/Service等)应用进程 (Zygote Fork)Android System (AMS/PMS)1. 请求创建组件 (Binder IPC)2. 反射创建实例 (newInstance)3. 调用生命周期回调 (onCreate/onStart)4. 汇报状态就绪

学术定义

  • 反射创建:系统通过ClassLoader加载组件的.class文件,并调用其无参构造函数创建实例。这就是为什么组件不能有显式构造函数。
  • 生命周期回调:系统在组件创建后,通过 Binder 回调其生命周期方法(如onCreate),应用进程只是被动执行。

3. Manifest 规范与解析机制

3.1 Manifest 文件结构(标准化定义)

AndroidManifest.xml是 APK 的元数据清单。以下是其标准结构(不包含业务属性):

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.example.app"android:sharedUserId="string"android:versionCode="integer"android:versionName="string"><!-- 1. 应用全局配置 --><applicationandroid:name=".MyApplication"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:process="string"><!-- 2. Activity 组件 --><activityandroid:name=".MainActivity"android:exported="boolean"android:launchMode="standard|singleTop|singleTask|singleInstance"android:taskAffinity="string"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity><!-- 3. Service 组件 --><serviceandroid:name=".MyService"android:exported="boolean"android:process="string"/><!-- 4. BroadcastReceiver 组件 --><receiverandroid:name=".MyReceiver"android:exported="boolean"><intent-filter><actionandroid:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver><!-- 5. ContentProvider 组件 --><providerandroid:name=".MyProvider"android:authorities="com.example.app.provider"android:exported="boolean"android:readPermission="string"android:writePermission="string"/></application><!-- 6. 权限声明 --><uses-permissionandroid:name="android.permission.INTERNET"/><permissionandroid:name="com.example.app.permission.CUSTOM"/></manifest>

3.2 PackageManagerService (PMS) 的解析流程

PMS 在系统启动或应用安装时解析 Manifest。

PackageManagerService

扫描 APK 目录 (/data/app)

解析 AndroidManifest.xml

构建 Package 对象

注册组件信息 (Activity/Service/Provider/Receiver)

保存到 Settings (packages.xml)

更新系统广播 (ACTION_PACKAGE_ADDED)

解析结果存储

  • PackageParser.Package:内存中的数据结构,包含所有组件信息。
  • packages.xml:持久化存储,记录所有已安装应用的包名、版本、权限、组件列表。

4. 组件间通信与 Intent 机制

4.1 Intent 作为组件间的契约

Intent 是组件间通信的消息载体。它分为两种:

Intent 类型特点解析方式
显式 Intent指定目标组件的类名直接匹配ComponentName
隐式 Intent指定 Action、Category、Data通过PackageManager查询匹配的组件

4.2 Intent Filter 的匹配算法

当使用隐式 Intent 时,PMS 会根据 Manifest 中声明的<intent-filter>进行匹配。

// PackageManagerService 中的匹配逻辑(简化)publicList<ResolveInfo>queryIntentActivities(Intentintent,StringresolvedType,intflags){// 1. 遍历所有已安装的 Package// 2. 遍历 Package 中的所有 Activity// 3. 检查 Activity 的 Intent Filter 是否匹配 Intent// 4. 返回匹配的 Activity 列表}

匹配规则

  1. Action:Intent 的 Action 必须包含在 Filter 的 Action 列表中。
  2. Category:Intent 的所有 Category 必须包含在 Filter 的 Category 列表中。
  3. Data:Intent 的 URI 和数据类型(MIME)必须与 Filter 的 Data 规范匹配。

5. 进程模型与组件归属

5.1 组件与进程的映射关系

一个组件运行在哪个进程,由 Manifest 中的android:process属性决定。

配置方式进程行为
不配置默认运行在应用的主进程(包名进程)。
:remote运行在私有远程进程(以冒号开头,进程名 = 包名:remote)。
完整包名运行在全局共享进程(多个应用可运行在同一进程,需相同签名和 sharedUserId)。

5.2 多进程下的组件实例化

Binder IPC

Binder IPC

远程进程 (com.example.app:remote)

Service Y

ContentProvider Z

主进程 (com.example.app)

Activity A

Service X

学术定义

  • 进程隔离:不同进程的内存空间是隔离的。组件跨进程通信必须通过 Binder。
  • Application 多实例:每个进程都会创建一个独立的Application实例。

6. 系统服务对组件的调度

6.1 ActivityManagerService (AMS) 的角色

AMS 是四大组件的总调度室。它负责:

  1. 组件生命周期:管理 Activity 栈、Service 生命周期。
  2. 进程管理:根据组件重要性调整进程优先级(oom_adj)。
  3. 任务栈管理:管理 Activity 的任务栈(Task)和回退栈(Back Stack)。

6.2 组件调度时序(以启动 Activity 为例)

Zygote 进程ActivityManagerService应用进程Zygote 进程ActivityManagerService应用进程alt[进程不存在]startActivity(intent)检查权限、解析 Intent、查找目标 Activity判断目标进程是否存在fork 新进程返回新进程 PIDscheduleLaunchActivity (Binder IPC)创建 Activity 实例、调用 onCreate

7. 关键数据结构与源码定义

7.1 ActivityRecord(AMS 中的 Activity 记录)

// com.android.server.am.ActivityRecordfinalclassActivityRecord{finalActivityInfoinfo;// 从 Manifest 解析来的信息finalStringpackageName;finalStringprocessName;// 运行在哪个进程finalintuserId;TaskRecordtask;// 所属的 TaskActivityStatestate;// 当前状态 (INITIALIZING, RESUMED, PAUSED...)}

7.2 ServiceRecord(AMS 中的 Service 记录)

// com.android.server.am.ServiceRecordfinalclassServiceRecord{finalServiceInfoinfo;// 从 Manifest 解析来的信息finalStringpackageName;finalStringprocessName;finalintuserId;booleanisForeground;// 是否是前台服务}

8. 本篇总结(知识闭环)

关键点纯学术定义
组件的本质由系统服务托管的声明式入口,而非普通对象。
Manifest 的本质全局注册表,定义组件属性、权限和进程归属。
PMS 的作用解析 Manifest,构建组件数据库,供 AMS 查询。
AMS 的作用四大组件的总调度室,管理生命周期、进程和任务栈。
Intent 的作用组件间通信的消息载体,通过匹配规则连接组件。

下一篇预告第二板块:Android 四大组件标准化学理 | 第七篇:Activity 页面载体与任务栈算法

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 3:15:23

如何用W_Mesh_28x插件在5分钟内掌握Blender参数化建模

如何用W_Mesh_28x插件在5分钟内掌握Blender参数化建模 【免费下载链接】W_Mesh_28x Blender addon for parametric objects 项目地址: https://gitcode.com/gh_mirrors/wm/W_Mesh_28x 还在为Blender中创建基础几何体而反复调整顶点和面吗&#xff1f;W_Mesh_28x这款Blen…

作者头像 李华
网站建设 2026/6/8 3:11:07

【花雕学编程】Arduino BLDC 之自主避障式辐射侦察机器人

所谓Arduino BLDC 自主避障式辐射侦察机器人&#xff0c;是指以 Arduino&#xff08;或协同类 32 位 MCU&#xff09;为控制核心&#xff0c;采用无刷直流电机&#xff08;BLDC&#xff09;驱动底盘&#xff0c;集成盖革-米勒管/闪烁体辐射探测器与超声波/ToF/LiDAR 避障传感器…

作者头像 李华
网站建设 2026/6/8 3:11:04

厂房设备整体搬迁,找对团队省心又高效

厂房搬迁搞垮了三条产线&#xff1f;这个教训我替你们踩过了去年我们公司总部搬迁&#xff0c;差点因为找错搬迁队&#xff0c;搞崩了整个下半年的订单交付。 当时图便宜&#xff0c;找了个小团队&#xff0c;结果人家吊装时磕坏了核心电机&#xff0c;产线调平误差直接超标&am…

作者头像 李华
网站建设 2026/6/8 3:09:13

SNN识别MNIST只有88%准确率?聊聊脉冲神经网络当前的局限与优化思路

SNN在MNIST上的88%准确率&#xff1a;瓶颈解析与突破路径探索当脉冲神经网络&#xff08;SNN&#xff09;在MNIST手写数字识别任务上仅获得88.32%的测试准确率时&#xff0c;这个数字背后隐藏着远比表面更复杂的技术图景。作为第三代神经网络模型&#xff0c;SNN在生物合理性方…

作者头像 李华
网站建设 2026/6/8 3:08:07

考研复习 Day 47 | 密码学--第七章 公钥密码(下)

注&#xff1a;以下内容参考《新编密码学》范九伦 张雪锋 侯红霞 编著7.4 椭圆曲线密码7.4.1 椭圆曲线的定义与性质椭圆曲线是指由Weierstrass方程yaxybyxcxdxe所确定的平面曲线。在密码学中&#xff0c;通常使用定义在有限域Zp​&#xff08;p为素数&#xff09;上的椭圆曲线&…

作者头像 李华