1、问题
开机后,谁把 AMS/WMS 等系统服务拉起来?App 为什么能「按名」找到它们?
开机后由init-Zygote-SystemServer负责启动AMS/WMS等系统服务;
App之所以能「按名」找到它们,是因为这些服务启动后会像ServiceManager注册自己的Binder入口。
2、入口
| 角色 | 干什么(各写 ≤15 字) |
|---|---|
| init | 解析启动脚本,拉起Zygote等关键进程 |
| Zygote | 预加载类/资源,fork出app和system_server |
| system_server / SystemServer | 在system_server 进程里创建并启动系统服务 |
| ServiceManager(真) | 系统注册服务表:addService/getService |
| Launcher | 桌面 App,用户看到的首页 |
3、主路径(开机到桌面)
1. 按下电源 / Bootloader
→
2. init 启动
→
3. 启动 Zygote
→
4. Zygote fork 出 system_server
→
5. SystemServer.run() / startBootstrapServices / startCoreServices / startOtherServices
→ 创建 AMS、WMS、PMS、Power… 并 addService
6. 系统就绪,启动 Launcher(桌面)
→
4、实践 —— 在手机/模拟器上看
# 1)系统是否起来、有没有 system_server
adb shell ps -A | grep system_server
# 2)已登记的服务名(真 ServiceManager 电话簿)
adb shell service list | head -40
# 3)和 Activity 相关的服务是否在
adb shell service list | grep -i activity
# 4)粗看 AMS(有输出即可,不必读懂全部)
adb shell dumpsys activity activities | head -30
5、读源码入口
浏览器打开:https://cs.android.com
搜索:SystemServer.java(选 frameworks/base/services/java/…/SystemServer.java)
服务名摘录:
1. ActivityManager
2. WindowManager
3. PackageManager
4. PowerManager
5. battery
6. DisplayManager
7. IDreamManager
8. BluetoohManager
6、口述
1、Zygote 干什么?SystemServer 干什么?
2、默画开机 5~7 步
513



被折叠的 条评论
为什么被折叠?



