Android系统启动-SystemServer进程

如上面所说

第1个回答  2022-08-01

相关源码文件:

根据上篇 Android系统启动-Zygote进程
文章,在Zygote进程启动时,会调用 ZygoteInit.main() 方法,其中分别会调用 registerZygoteSocket、preload 、startSystemServer 、runSelectLoop 来创建服务Socket、提前加载资源、创建SystemServer进程、循环创建子进程。

本篇文章讲解 startSystemServer() 方法,在startSystemServer()方法中主要完成两件事:
· 创建SystemServer进程
· SystemServer进程启动系统服务

下图则是startSystemServer方法的创建过程,先通过 Zygote.forkSystemServe 去创建SystemServer进程,创建SystemServer进程之后,通过 handleSystemServerProcess() 在SystemServer进程中去启动服务。

Zygote.forkSystemServer

创建 SystemServer 进程是通过 com.android.internal.os. Zygote 的 nativeForkSystemServer 本地方法创建的,JNI方法的注册在 AndroidRuntime 中,通过查询[包名]_[类名]可以知道对应的方法为:com_android_internal_os_Zygote.cpp类的com_android_internal_os_Zygote_nativeForkAndSpecialize()方法。最后通过 ForkAndSpecializeCommon 方法 fork() 创建SystemServer进程。

handleSystemServerProcess(parsedArgs)

通过一连串的分析得知,一是通过 nativeZygoteInit 去启动Bind,二是通过 applicationInit 方法通过异常去反射执行 SystemServer.main 方法,这里为什么需要通过异常去反射执行方法呢?为什么不直接反射执行方法?其实是为了清空栈的信息。到这里并没有启动服务,接下来的 SystemServer.main 方法是启动服务的开始。

SystemServer.main

SystemServer执行 main() 方法后调用 run 方法,之后分别调用 startBootstrapServices 、 startCoreServices 、 startOtherServices 开始启动很多服务,像常见的 ActivityManagerService、PackageManagerService、WindowManagerService、InputManagerServic 服务都在这里开启。
开启服务有两种方式:

但是发现最终都是调用到LocalServices.addService这种方法。

可见启动服务是靠Binder驱动去开启的。

首先通过JNI的注册方法去创建SystemServer进程,创建进程之后,开始处理SystemServer进程,通过异常反射调用SystemServer的main方法,主要完成两件事:一、启动Binder驱动线程,二、开启服务(AMS、PMS、WMS、IMS等),最后通过Binder驱动去启动服务。

Android系统启动-SystemServer进程
根据上篇 Android系统启动-Zygote进程 文章,在Zygote进程启动时,会调用 ZygoteInit.main() 方法,其中分别会调用 registerZygoteSocket、preload 、startSystemServer 、runSelectLoop 来创建服务Socket、提前加载资源、创建SystemServer进程、循环创建

Android App启动流程,看这一篇就够了!
system_server进程接收到Launcher进程发来的startActivity请求后,会进行一系列的处理,包括权限检查、Activity信息解析等。处理完成后,system_server进程向zygote进程发送创建新进程的请求。Zygote进程fork出新进程:Zygote进程是Android系统中的一个特殊进程,它负责孵化出新的应用进程。收到system_server进程的请...

systemui 启动流程
SystemUI的启动流程主要包括以下步骤:Zygote进程启动:Zygote进程是Android系统启动的第一步。作为Android应用程序的孵化器,Zygote进程会预加载常用的类和资源,以便在后续的应用进程创建过程中加速启动速度。SystemServer进程启动:SystemServer进程是Zygote进程孵化的第一个系统进程。它负责启动和管理所有系统服务。

android ams启动流程
具体来说,AMS的启动流程包括以下几个关键步骤:SystemServer的启动:在Android系统启动时,SystemServer的main方法会被调用。在main方法中,通过new SystemServer().run()来启动SystemServer。系统上下文和服务管理器的创建:在SystemServer的run方法中,首先会创建系统上下文(System Context)。接着,会创建系...

AMS启动流程——APP启动过程
AMS启动流程中的APP启动过程主要包括以下几个步骤:zygote进程启动:zygote是Android系统中首个启动的进程,由init进程直接或间接fork出来。zygote进程作为“受精卵”,能够迅速分裂产生新的进程,这些新进程作为zygote的子进程运行,负责应用程序的启动。SystemServer进程启动:SystemServer进程同样由zygote进程fork...

systemserver是什么意思
定义:SystemServer是Android系统中的一个关键组件,位于JAVA层。功能:它负责管理和启动各种系统服务,这些服务是Android应用开发所依赖的基础设施。启动过程:在Android系统启动时,会指定SystemServer进程的参数。随后,系统会调用handleSystemServerProcess方法来启动这些参数所指定的类,即com.android.server....

Android系统Launcher启动流程
Android系统Launcher启动流程主要包括以下几个核心步骤:init进程启动:作用:作为系统初始化的核心,init进程负责设置进程优先级,创建必要的文件目录等。关键组件:FirstStageMain负责挂载相关文件,SetupSelinux负责安全策略设置。Zygote进程的启动:启动方式:通过解析init.rc脚本启动。功能:与AppRuntime交互,...

图解Android系统按下电源到显示界面的5个关键过程
过程描述:SystemServer进程被创建后,启动Binder线程池,以便与其他进程进行通信。创建SystemServiceManager,用于对系统的服务进行创建、启动和生命周期管理。启动各种系统服务,这些服务在ServiceManager进程中完成注册和获取,跨进程通信上使用Android的binder机制。图示:五、应用启动与窗口显示 应用启动过程:Laun...

【今日好题】请介绍一下Activity的启动流程
一、应用内部启动当应用内部的一个Activity需要启动另一个Activity时,通常通过startActivity方法来实现。以下是应用内部启动Activity的详细流程:发起请求:APP进程通过Binder IPC(Inter-Process Communication,进程间通信)向system_server进程发起启动Activity的请求。系统服务器处理:system_server进程接收到请求后...

Android系统Launcher启动流程
作者:MannaYang 探索Android系统启动过程,深入了解Launcher运行机制 1. Android启动核心流程详解 - init进程启动:作为系统初始化的核心,init进程主要负责设置进程优先级,创建必要的文件目录,如FirstStageMain负责挂载相关文件,SetupSelinux负责安全策略设置。2. 从init到Zygote进程 - FirstStageMain和Second...

相似回答
大家正在搜