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

android-PMS-开机流程

Android Package Manager Service (PMS) 的开机启动流程是系统初始化的核心环节,主要涉及以下关键阶段:


🔧 一、启动入口:SystemServer 引导阶段

  1. SystemServer 加载 PMS
    • SystemServer.startBootstrapServices() 方法中调用 PackageManagerService.main() 创建 PMS 实例,并注册到 ServiceManagerpackage 服务中。
    • 此阶段会暂停 Watchdog 监控,确保 PMS 初始化不被中断。

🔍 二、PMS 初始化与扫描阶段

  1. 构造函数执行核心逻辑

    • 解析系统配置文件(如 package.xml),加载预装应用的权限和配置信息。
    • 扫描系统分区 APK(目录:/system/app/system/priv-app/vendor/app 等),解析 AndroidManifest.xml 并缓存包信息。
    • 耗时重点:此阶段占开机总时间的 70% 左右,尤其影响大存储设备启动速度。
  2. 多级目录扫描策略

    • 优先扫描系统分区(/system),再处理 Overlay 目录(/system/overlay,用于厂商预制可卸载应用)。
    • 延迟扫描用户应用分区(/data/app),避免阻塞核心服务启动。

️ 三、启动完成与优化机制

  1. BOOT_COMPLETED 后处理

    • 开机完成后,通过 BroadcastReceiver 监听 ACTION_BOOT_COMPLETED 广播,触发用户应用扫描和更新。
    • 动态加载 /data/app 下的第三方应用,补充至 PMS 缓存。
  2. 性能优化方案

    • 多线程并发扫描:通过系统属性 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小瓜

http://www.dtcms.com/a/306457.html

相关文章:

  • 配置国内镜像源加速Python包安装
  • 第2章 cmd命令基础:常用基础命令(3)
  • xxljob-快速上手
  • 真 万人互动MMO游戏技术公開測試
  • 推扫式和凝视型高光谱相机分别采用哪些分光方式?
  • AutoSAR(MCAL) --- ADC
  • Helm在Kubernetes中的应用部署指南与案例解析
  • Newman+Jenkins实施接口自动化测试
  • docker 安装elasticsearch
  • python 中 `batch.iloc[i]` 是什么:integer location
  • ACL 2025 第二弹:维也纳风情舞会点燃学术之夜
  • ActiveMQ消息队列:从入门到Spring Boot实战
  • AI Compass前沿速览:可灵创意工坊、字节Coze StudioCoze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源
  • 16-C语言:第17天笔记
  • sqLite 数据库 (3):以编程方式使用 sqLite,4 个函数,以及 sqLite 移植,合并编译
  • Keil随笔—Lib库的源码级调试
  • 设计模式:组合模式 Composite
  • DITR:DINO in the Room: Leveraging 2D Foundation Models for 3D Segmentation
  • STM32启动流程详解:从复位到main函数的完整路径
  • 字节跳动GR-3:可泛化、支持长序列复杂操作任务的机器人操作大模型(技术报告解读)
  • 【计算机科学与应用】基于Session欺骗攻击的Web应用程序防护
  • 基于信标RSSI的GNN-Transformer室内定位算法
  • 常见的cms框架的webshell方法
  • 一篇讲清Redis中常见数据类型的用法
  • BGP高级特性之正则表达式
  • 【MATLAB/Simulink】查看MATLAB以往版本的帮助文档
  • 利用椭圆方程完成 NACA0012 翼型的网格绘制
  • 常⻅CMS漏洞
  • 力扣面试150题--只出现一次的数字
  • 【预判一手面试问题:排序】