android-PMS-开机流程
Android Package Manager Service (PMS) 的开机启动流程是系统初始化的核心环节,主要涉及以下关键阶段:
🔧 一、启动入口:SystemServer 引导阶段
- SystemServer 加载 PMS
- 在
SystemServer.startBootstrapServices()
方法中调用PackageManagerService.main()
创建 PMS 实例,并注册到ServiceManager
的package
服务中。 - 此阶段会暂停
Watchdog
监控,确保 PMS 初始化不被中断。
- 在
🔍 二、PMS 初始化与扫描阶段
-
构造函数执行核心逻辑
- 解析系统配置文件(如
package.xml
),加载预装应用的权限和配置信息。 - 扫描系统分区 APK(目录:
/system/app
、/system/priv-app
、/vendor/app
等),解析AndroidManifest.xml
并缓存包信息。 - 耗时重点:此阶段占开机总时间的 70% 左右,尤其影响大存储设备启动速度。
- 解析系统配置文件(如
-
多级目录扫描策略
- 优先扫描系统分区(
/system
),再处理Overlay
目录(/system/overlay
,用于厂商预制可卸载应用)。 - 延迟扫描用户应用分区(
/data/app
),避免阻塞核心服务启动。
- 优先扫描系统分区(
️ 三、启动完成与优化机制
-
BOOT_COMPLETED 后处理
- 开机完成后,通过
BroadcastReceiver
监听ACTION_BOOT_COMPLETED
广播,触发用户应用扫描和更新。 - 动态加载
/data/app
下的第三方应用,补充至 PMS 缓存。
- 开机完成后,通过
-
性能优化方案
- 多线程并发扫描:通过系统属性
ro.pms.parallel_scan
启用并行解析,加速系统分区处理。 - 增量缓存机制:利用
/data/system/package_cache
目录缓存已解析数据,仅扫描变更的 APK 文件。 - 延迟非核心加载:将用户应用扫描推迟至桌面启动后,优先保障系统可用性。
- 多线程并发扫描:通过系统属性
💎 PMS 开机流程关键点总结
阶段 | 操作内容 | 技术实现 |
---|---|---|
SystemServer 启动 | 创建 PMS 实例并注册服务 | PackageManagerService.main() 调用 |
系统分区扫描 | 解析预装应用权限与组件信息 | 构造函数内遍历 /system/*/*.apk |
用户应用延迟加载 | 动态注册 /data/app 应用 | BOOT_COMPLETED 广播触发 |
性能优化 | 多线程/缓存/延迟加载策略 | 并发扫描与 package_cache 复用 |
厂商适配建议:
- 系统分区扫描需兼容 Overlay 机制(如
/system/overlay
),确保厂商定制应用正常加载。- 避免在 PMS 构造函数中执行耗时 I/O 操作,优先采用异步任务分流初始化压力。
⚠️ 流程阻塞风险
若系统应用 APK 异常(如签名错误或 Manifest 损坏),PMS 构造函数可能抛出异常,导致 SystemServer 崩溃 并触发重启。需严格校验预装应用合法性。
引用链接:
1.深入PMS源码(一)—— PMS的启动过程和执行流程 - CSDN博客
2.Android PMS——PMS服务启动流程(二) - CSDN博客
3.Android开机阶段耗时 - pushenghe
4.pms服务启动原理详解从开机到机制与流程.pptx 8页 - 原创力文档
5.(OK) Android PackageManagerService分析一:PMS的启动 - 博客园
6.Android应用启动流程分析 - 小帅
7.Android开机启动时PMS扫描APK - 51CTO博客
8.Android S(31) PMS 服务启动流程 - CSDN博客
9.安卓手机开机全流程,轻松掌握操作技巧 - 宅乐甜饼酱
10.android系统怎么打开 - 好奇杜小二
11.Android系统是如何启动的?启动流程是什么样的? - 哔哩哔哩
12.安卓系统启动流程揭秘 - 派大唾沫星子
13.安卓开机流程解析 - 唇釉仙姬
14.Android PMS开机结束标志 android开机启动流程 - 51CTO博客
15.Android 应用程序安装流程解析 - 掘金开发者社区
16.【Android基础回顾】三:Android启动流程 - CSDN博客
17.Android7.0 PowerManagerService(1) 启动过程 - 51CTO博客
18.Android 系统启动过程详解是怎样的? - 知乎 - 小帅
19.Android startActivity 启动过程分析 - 掘金开发者社区
20.Android13 PMS是如何启动的? - OpenHarmony小瓜