第二板块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用户界面交互否前台可见时存活可配置ActivityManagerServiceService后台逻辑执行是除非被回收可配置ActivityManagerServiceBroadcastReceiver系统/应用事件广播否瞬时执行否默认宿主进程ActivityManagerServiceContentProvider数据共享与访问是进程启动时加载可配置ActivityManagerService / PackageManagerService2.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:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.appandroid:sharedUserIdstringandroid:versionCodeintegerandroid:versionNamestring!-- 1. 应用全局配置 --applicationandroid:name.MyApplicationandroid:icondrawable/ic_launcherandroid:labelstring/app_nameandroid:processstring!-- 2. Activity 组件 --activityandroid:name.MainActivityandroid:exportedbooleanandroid:launchModestandard|singleTop|singleTask|singleInstanceandroid:taskAffinitystringintent-filteractionandroid:nameandroid.intent.action.MAIN/categoryandroid:nameandroid.intent.category.LAUNCHER//intent-filter/activity!-- 3. Service 组件 --serviceandroid:name.MyServiceandroid:exportedbooleanandroid:processstring/!-- 4. BroadcastReceiver 组件 --receiverandroid:name.MyReceiverandroid:exportedbooleanintent-filteractionandroid:nameandroid.intent.action.BOOT_COMPLETED//intent-filter/receiver!-- 5. ContentProvider 组件 --providerandroid:name.MyProviderandroid:authoritiescom.example.app.providerandroid:exportedbooleanandroid:readPermissionstringandroid:writePermissionstring//application!-- 6. 权限声明 --uses-permissionandroid:nameandroid.permission.INTERNET/permissionandroid:namecom.example.app.permission.CUSTOM//manifest3.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 中的匹配逻辑简化publicListResolveInfoqueryIntentActivities(Intentintent,StringresolvedType,intflags){// 1. 遍历所有已安装的 Package// 2. 遍历 Package 中的所有 Activity// 3. 检查 Activity 的 Intent Filter 是否匹配 Intent// 4. 返回匹配的 Activity 列表}匹配规则ActionIntent 的 Action 必须包含在 Filter 的 Action 列表中。CategoryIntent 的所有 Category 必须包含在 Filter 的 Category 列表中。DataIntent 的 URI 和数据类型MIME必须与 Filter 的 Data 规范匹配。5. 进程模型与组件归属5.1 组件与进程的映射关系一个组件运行在哪个进程由 Manifest 中的android:process属性决定。配置方式进程行为不配置默认运行在应用的主进程包名进程。:remote运行在私有远程进程以冒号开头进程名 包名:remote。完整包名运行在全局共享进程多个应用可运行在同一进程需相同签名和 sharedUserId。5.2 多进程下的组件实例化Binder IPCBinder IPC远程进程 (com.example.app:remote)Service YContentProvider Z主进程 (com.example.app)Activity AService X学术定义进程隔离不同进程的内存空间是隔离的。组件跨进程通信必须通过 Binder。Application 多实例每个进程都会创建一个独立的Application实例。6. 系统服务对组件的调度6.1 ActivityManagerService (AMS) 的角色AMS 是四大组件的总调度室。它负责组件生命周期管理 Activity 栈、Service 生命周期。进程管理根据组件重要性调整进程优先级oom_adj。任务栈管理管理 Activity 的任务栈Task和回退栈Back Stack。6.2 组件调度时序以启动 Activity 为例Zygote 进程ActivityManagerService应用进程Zygote 进程ActivityManagerService应用进程alt[进程不存在]startActivity(intent)检查权限、解析 Intent、查找目标 Activity判断目标进程是否存在fork 新进程返回新进程 PIDscheduleLaunchActivity (Binder IPC)创建 Activity 实例、调用 onCreate7. 关键数据结构与源码定义7.1 ActivityRecordAMS 中的 Activity 记录// com.android.server.am.ActivityRecordfinalclassActivityRecord{finalActivityInfoinfo;// 从 Manifest 解析来的信息finalStringpackageName;finalStringprocessName;// 运行在哪个进程finalintuserId;TaskRecordtask;// 所属的 TaskActivityStatestate;// 当前状态 (INITIALIZING, RESUMED, PAUSED...)}7.2 ServiceRecordAMS 中的 Service 记录// com.android.server.am.ServiceRecordfinalclassServiceRecord{finalServiceInfoinfo;// 从 Manifest 解析来的信息finalStringpackageName;finalStringprocessName;finalintuserId;booleanisForeground;// 是否是前台服务}8. 本篇总结知识闭环关键点纯学术定义组件的本质由系统服务托管的声明式入口而非普通对象。Manifest 的本质全局注册表定义组件属性、权限和进程归属。PMS 的作用解析 Manifest构建组件数据库供 AMS 查询。AMS 的作用四大组件的总调度室管理生命周期、进程和任务栈。Intent 的作用组件间通信的消息载体通过匹配规则连接组件。下一篇预告第二板块Android 四大组件标准化学理 | 第七篇Activity 页面载体与任务栈算法