Android开发:System Server 分析

2014-11-24 10:26:57 · 作者: · 浏览: 1

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 函数。