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 ≈ "负责把楼里各个部门(服务)都组织起来运转的物业/总管程序"
相关推荐
画个太阳作晴天2 小时前
Android App 跟随系统自动切换白天/黑夜模式:车机项目实战经验分享
android·android studo
成都大菠萝2 小时前
2-2-2 快速掌握Kotlin-语言的接口默认实现
android
代码s贝多芬的音符2 小时前
android webview 打开相机 相册 图片上传。
android·webview·webview打开相机相册
游戏开发爱好者83 小时前
抓包工具有哪些?代理抓包、数据流抓包、拦截转发工具
android·ios·小程序·https·uni-app·iphone·webview
StarShip3 小时前
Android system_server进程介绍
android
StarShip3 小时前
Android Context 的 “上下文”
android
成都大菠萝3 小时前
2-6-1 快速掌握Kotlin-语言的接口定义
android
李小轰_Rex3 小时前
纯算法AEC:播录并行场景的回声消除实战笔记
android·音视频开发
ok406lhq4 小时前
unity游戏调用SDK支付返回游戏会出现画面移位的问题
android·游戏·unity·游戏引擎·sdk