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 ≈ "负责把楼里各个部门(服务)都组织起来运转的物业/总管程序"
相关推荐
警醒与鞭策13 分钟前
【无标题】
android·unity·性能优化·游戏引擎·perforce
传奇开心果编程2 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
李游Leo4 小时前
《HarmonyOS 7 精准碰一碰跨设备协作开发实战》07:异常恢复、状态机与CrossDrop工程收尾【鸿蒙心迹】
android·harmonyos
方白羽7 小时前
Android APK安全防护
android·安全·apk
小黄人软件7 小时前
AndroidStudio老项目 macOS运行BlueTooth蓝牙串口助手(Android+Studio源码).rar
android·macos
00后程序员张7 小时前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
天神哥哥啊7 小时前
cocos联调注意事项-安卓
android
TDengine (老段)8 小时前
TDengine TSDB 实战排障四(升级与兼容)
android·java·大数据·数据库·物联网·时序数据库·tdengine
蓝速科技8 小时前
政务自助终端信创选型与无人值守落地方案
android·大数据·数据库·人工智能·科技·技术分享·政务
硫酸锌0110 小时前
在手机上运行Python增量备份手机数据到PC电脑
android·windows·python