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 ≈ "负责把楼里各个部门(服务)都组织起来运转的物业/总管程序"
相关推荐
祖国的好青年37 分钟前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
黄林晴1 小时前
警惕!AGP 9.2 别只改版本号,R8 规则与构建链路全线收紧
android·gradle
小米渣的逆袭1 小时前
Android ADB 完全使用指南
android·adb
儿歌八万首1 小时前
Jetpack Compose Canvas 进阶:结合 animateFloatAsState 让自定义图形动起来
android·动画·compose
zhangphil2 小时前
Android Page 3 Flow读sql数据库媒体文件,Kotlin
android·kotlin
神探小白牙3 小时前
echarts,3d堆叠图
android·3d·echarts
李白的天不白3 小时前
如何项目发布到github上
android·vue.js
summerkissyou19873 小时前
Android-RTC、NTP 和 System Time(系统时间)
android
小书房3 小时前
Kotlin使用体验及理解1
android·开发语言·kotlin
撩得Android一次心动4 小时前
Android Navigation 组件全面讲解
android·jetpack·navigation