SystemServer 源码解析
时间: 2023-09-05 12:13:14 浏览: 241
SystemServer 是 Android 系统启动过程中的关键组件之一,它负责启动和管理系统中的各种服务和进程。SystemServer 的主要功能如下:
1. 启动 Android 系统中的各种系统服务,如 ActivityManagerService、PackageManagerService、WindowManagerService 等;
2. 初始化和启动 Zygote 进程,该进程将作为应用程序进程的父进程;
3. 启动系统中的各种进程,如系统进程、系统应用进程等;
4. 加载和初始化 Android 系统的各种服务和组件。
下面是 SystemServer 的源码解析:
1. SystemServer 的入口
SystemServer 的入口在 frameworks/base/services/java/com/android/server/SystemServer.java 文件中。在该文件中,SystemServer 类继承了 Binder 和 Runnable 接口,并且实现了 Runnable 接口的 run() 方法,该方法是 SystemServer 的入口。
在 run() 方法中,SystemServer 执行了以下操作:
1.1. 初始化 SystemServer 的环境
SystemServer 首先初始化自己的环境,包括设置系统属性、设置线程优先级等。
1.2. 启动各种系统服务
SystemServer 启动 Android 系统中的各种系统服务,包括 ActivityManagerService、PackageManagerService、WindowManagerService 等。这些服务都是在 SystemServer 的构造方法中创建的。
1.3. 初始化和启动 Zygote 进程
SystemServer 初始化和启动 Zygote 进程,该进程将作为应用程序进程的父进程。具体而言,SystemServer 调用 Zygote 的 main() 方法启动 Zygote 进程,并且设置 Zygote 的命令行参数。
1.4. 启动系统中的各种进程
SystemServer 启动 Android 系统中的各种进程,包括系统进程、系统应用进程等。具体而言,SystemServer 调用 ActivityManagerService 的 startSystemServer() 方法启动系统进程,并且调用 PackageManagerService 的 scanDirTracedLI() 方法扫描系统应用。
1.5. 加载和初始化 Android 系统的各种服务和组件
SystemServer 加载和初始化 Android 系统的各种服务和组件,包括 SystemUI、Launcher、InputMethodService 等。具体而言,SystemServer 调用 ActivityManagerService 的 startHomeActivity() 方法启动 Launcher,并且调用 PackageManagerService 的 packageInstalled() 方法加载和初始化应用程序。
2. SystemServer 的启动流程
SystemServer 的启动流程如下:
2.1. 启动 init 进程
在 Android 系统启动过程中,init 进程是第一个进程。init 进程启动时,会执行 init.rc 脚本中的命令,并且启动 SystemServer 进程。
2.2. 创建 SystemServer 进程
SystemServer 进程是在 init.rc 脚本中通过 service 命令创建的。具体而言,init.rc 脚本中会执行以下命令:
```
service system_server /system/bin/app_process -Xbootclasspath:/system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/bouncycastle.jar:/system/framework/apache-xml.jar:/system/framework/core-junit.jar -classpath /system/framework/services.jar com.android.server.SystemServer
```
该命令会启动 SystemServer 进程,并且设置 SystemServer 的启动参数。
2.3. 执行 SystemServer 的 run() 方法
当 SystemServer 进程启动后,会执行 SystemServer 的 run() 方法。在 run() 方法中,SystemServer 完成了 Android 系统的初始化和启动过程。
阅读全文