SystemServer类 与 system_server进程

  • 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 = 这个进程里跑的入口类。

更具体一点的启动链(简化版):

  1. ZygoteInit.main() (在 zygote 进程里)

    1. 调用 startSystemServer()
  2. startSystemServer()

    1. 通过 forkSystemServer() → 从 Zygote fork 出一个子进程;
    2. 为这个子进程设置进程名为 system_server
  3. 子进程(也就是 system_server 进程)启动后

    1. 执行 com.android.internal.os.RuntimeInit 相关初始化;
    2. 再调用 com.android.server. SystemServer.main ()
  4. SystemServer.main()

    1. new 一个 SystemServer 对象,调用 run()
    2. 在里面执行 startBootstrapServices() / startCoreServices() / startOtherServices() 启动各个 service。

所以关系图可以理解为:

  • 进程级zygote → fork → system_server 进程
  • 进程内部代码入口SystemServer.main()SystemServer.run() → 启动各个系统服务

三、核心区别:视角与关注点的不同

  1. 从系统 / 内核视角
  • 你看到的是:有一个叫 system_server 的进程,占用 CPU/内存,是内核调度的对象。

崩溃日志里 top line 一般写的是:

Process: system_server

  • 相当于"操作系统观"下的实体。
  1. 从 Java / Framework 开发者视角
  • 你在源码里看到的是:有一个 SystemServer ,负责系统服务的启动。

  • 工作内容主要是:

    • SystemServer 里加/改系统服务的创建顺序、参数、依赖;
    • 调整某个服务何时由 SystemServer 拉起。
  1. 从调试/排查问题视角
  • 进程级问题 (如 OOM、native crash、Watchdog 卡死): 你关注的是 system_server tombstone 、ANR traces、进程优先级、CPU/memory
  • 服务启动/依赖顺序问题 (比如某个 Service 没有正常启动、死在启动流程里): 你更多会去看 SystemServer.startBootstrapServices/startOtherServices 里的代码与日志

四、联系总结(可以记住的一句对照)

  • system_server

    • 概念:进程名
    • 角色:承载 Framework Java 服务的 进程容器
    • 对象:操作系统 / 内核 / 调度
  • SystemServer

    • 概念:Java 类
    • 角色:在 system_server 进程里负责 启动所有系统服务的入口类
    • 对象:Framework 开发 / 系统服务逻辑

可以类比成:

  • system_server ≈ "整栋大楼(进程)"
  • SystemServer ≈ "负责把楼里各个部门(服务)都组织起来运转的物业/总管程序"
相关推荐
KevinWang_1 小时前
Android 的 assets 资源和 raw 资源有什么区别?
android
码农幻想梦2 小时前
2021Android从零入门到实战(慕课网官方账号)
android
Jomurphys2 小时前
Android 架构 - 组件化 Modularzation
android
明明明h2 小时前
【Unity3D】Android App Bundle(aab)打包上架Google Play介绍
android
花卷HJ2 小时前
Android 通用 RecyclerView Adapter 实现(支持 ViewBinding + 泛型 + 点击事件)
android
oMcLin2 小时前
如何在Ubuntu 22.04 LTS上配置并优化MySQL 8.0分区表,提高大规模数据集查询的效率与性能?
android·mysql·ubuntu
幸福的达哥3 小时前
安卓APP代码覆盖率测试方案
android·代码覆盖率
佛系打工仔3 小时前
绘制K线入门
android
川石课堂软件测试5 小时前
Android和iOS APP平台测试的区别
android·数据库·ios·oracle·单元测试·测试用例·cocoa
花卷HJ5 小时前
Android 通用 BaseDialog 实现:支持 ViewBinding + 全屏布局 + 加载弹窗
android