system_server:是一个 进程名,指系统中那条最关键的 Java 进程。SystemServer:是一个 Java 类 (com.android.server.SystemServer),在system_server进程里运行,负责在这个进程中 创建并启动各种系统服务。
一、各自是什么?
1. system_server 是什么?
-
身份 :Linux 用户空间里的 一个进程 ,进程名是
system_server。 -
来源 :由 Zygote 通过
forkSystemServer()fork 出来。 -
作用 :承载绝大部分 Framework 层 Java 系统服务 的运行环境。
-
特征:
- 运行用户:一般是 system UID;
- 在
ps/top/dumpsys/logcat等工具中,以 进程实体 的形式出现; - 一旦这个进程崩溃,整个 Android Framework 基本算"挂了"。
可以把它理解为: "系统服务 Java 世界的大房子" 。
2. SystemServer 是什么?
-
身份 :一个 Java 类 ,完整类名为:
com.android.server.SystemServer。 -
所在进程 :这段代码在
system_server进程内部执行。 -
作用 :在
run()方法里去:- 创建各种系统服务对象(如 AMS、PMS、WMS 等);
- 调用它们的
onStart()之类方法; - 把它们注册进
ServiceManager; - 最后进入主线程消息循环,维持整个系统服务运行。
可以把它理解为: "在 system_server 这个房子里跑起来的主程序/管家" 。
二、两者的关系:谁在谁里面?
用一句话描述关系:
system_server= 进程容器,SystemServer= 这个进程里跑的入口类。
更具体一点的启动链(简化版):
-
ZygoteInit.main() (在 zygote 进程里)
- 调用
startSystemServer();
- 调用
-
startSystemServer()
- 通过
forkSystemServer()→ 从 Zygote fork 出一个子进程; - 为这个子进程设置进程名为
system_server;
- 通过
-
子进程(也就是 system_server 进程)启动后
- 执行
com.android.internal.os.RuntimeInit相关初始化; - 再调用
com.android.server.SystemServer.main();
- 执行
-
SystemServer.main()
- new 一个
SystemServer对象,调用run(); - 在里面执行
startBootstrapServices()/startCoreServices()/startOtherServices()启动各个 service。
- new 一个
所以关系图可以理解为:
- 进程级 :
zygote→ fork →system_server进程 - 进程内部代码入口 :
SystemServer.main()→SystemServer.run()→ 启动各个系统服务
三、核心区别:视角与关注点的不同
- 从系统 / 内核视角
- 你看到的是:有一个叫
system_server的进程,占用 CPU/内存,是内核调度的对象。
崩溃日志里 top line 一般写的是:
Process: system_server
- 相当于"操作系统观"下的实体。
- 从 Java / Framework 开发者视角
-
你在源码里看到的是:有一个
SystemServer类,负责系统服务的启动。 -
工作内容主要是:
- 在
SystemServer里加/改系统服务的创建顺序、参数、依赖; - 调整某个服务何时由
SystemServer拉起。
- 在
- 从调试/排查问题视角
- 进程级问题 (如 OOM、native crash、Watchdog 卡死): 你关注的是
system_servertombstone 、ANR traces、进程优先级、CPU/memory。 - 服务启动/依赖顺序问题 (比如某个 Service 没有正常启动、死在启动流程里): 你更多会去看
SystemServer.startBootstrapServices/startOtherServices里的代码与日志。
四、联系总结(可以记住的一句对照)
-
system_server:- 概念:进程名
- 角色:承载 Framework Java 服务的 进程容器
- 对象:操作系统 / 内核 / 调度
-
SystemServer:- 概念:Java 类
- 角色:在
system_server进程里负责 启动所有系统服务的入口类 - 对象:Framework 开发 / 系统服务逻辑
可以类比成:
system_server≈ "整栋大楼(进程)"SystemServer≈ "负责把楼里各个部门(服务)都组织起来运转的物业/总管程序"