1.SystemServer 类是如何启动的
让我们从 Android 的启动过程看起,查看 init.rc 文件,就会发现下面这一行
service zygote /system/bin/app_process -Xzygote /system/bin --zygote –start-system-server
我们知道 zygote 进程是整个 Android 的孵化器进程,所有的 Activity 进程均是通过它来生成的。我们发现在 zygote 进程启动过程中指定了这么一个参数“– start-system-server” ,这个参数就是在 zygote 进程启动的同时启动 SystemServer 。
那么 SystemServer 是以什么样的形式启动的呢?是单独的一个进程还是线程,分析一下 zygote 进程的启动过程就明白了。在 Android 中 zygote 进程启动其实就是启动 /system/bin/app_process 这个进程,这个进程的源代码在 frameworks/base/cmds/app_process/app_main.cpp 中。
由于 zygote 进程启动过程有“ --zygote” 这个参数,所以走的是下面这步
runtime.start("com.android.internal.os.ZygoteInit",startSystemServer);
查看对象 runtime 的类型的定义,
class AppRuntime : public AndroidRuntime
因此查看 AndroidRuntime 的 start 方法中的一段代码 (frameworks/base/core/jni/AndroidRuntime.cpp)
其中 startClass 即为 "com.android.internal.os.ZygoteInit" ,这段代码调用了 com.android.internal.os.ZygoteInit 的 main 函数。