目录
1.1 ZygoteInit.handleSystemServerProcess
1.1.1 ZygoteInit.performSystemServerDexOpt
1.1.2 ZygoteInit.createPathClassLoader
1.2.2 ZygoteInit.nativeZygoteInit
1.2.3 RuntimeInit.applicationInit()
1.2.4 RuntimeInit.invokeStaticMain
前言
上一篇文章已经将systemserver进程创建出来,接下去重点分析下剩余的主要逻辑;
涉及源码
/frameworks/base/core/java/com/android/internal/os/
- ZygoteInit.java
- RuntimeInit.java
- Zygote.java
/frameworks/base/core/services/java/com/android/server/
- SystemServer.java
/frameworks/base/core/jni/
- com_android_internal_os_Zygote.cpp
- AndroidRuntime.cpp
/frameworks/base/cmds/app_process/App_main.cpp
一、systemserver开始工作
1.1 ZygoteInit.handleSystemServerProcess
public class ZygoteInit {
private static Runnable forkSystemServer(String abiList, String socketName, ZygoteServer zygoteServer) {
xxxx
/* For child process */
if (pid == 0) {
//有两个zygote进程情况,需等待第2个zygote创建完成。
if (hasSecondZygote(abiList)) {
waitForSecondaryZygote(socketName);
}
zygoteServer.closeServerSocket(); //需要关闭zygote原有的socke
return handleSystemServerProcess(parsedArgs); //
}
}
//system_server进程已经创建ok,进而继续调用systemServer.main函数
private static Runnable handleSystemServerProcess(ZygoteConnection.Arguments parsedArgs) {
//设置当前进程名称
if (parsedArgs.niceName != null) {
Process.setArgV0(parsedArgs.niceName);
}
final String systemServerClasspath = Os.getenv("SYSTEMSERVERCLASSPATH");
// $SYSTEMSERVERCLASSPATH
// /system/bin/sh: /system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar:/system/framework/dframework.jar: not found
if (systemServerClasspath != null) {
//调用installd 将jar->dex->odex
performSystemServerDexOpt(systemServerClas

文章详细阐述了Android系统服务SystemServer的启动过程,从Zygote进程如何孵化SystemServer,到DexOpt优化,再到Binder线程的启动,以及最终调用SystemServer的main方法。过程中涉及的关键类包括ZygoteInit、RuntimeInit和InstallerConnection,以及关键步骤如设置类加载器、处理异常、初始化Binder通信等。
最低0.47元/天 解锁文章
576

被折叠的 条评论
为什么被折叠?



