5-6: System Server 的启动过程
2016-04-06 15:28:56 0 举报
System Server 是 Android 系统的核心组件,负责管理和调度各种系统服务。它的启动过程可以分为以下几个步骤: 1. 加载和初始化 System Server 进程。 2. 创建 Binder 线程池,用于处理客户端请求。 3. 启动各种系统服务,如窗口管理器、输入法框架等。 4. 启动 Zygote 进程,用于孵化新的应用程序进程。 5. 启动各种硬件抽象层(HAL)驱动,以便应用程序可以访问硬件设备。 6. 启动各种系统服务,如位置服务、通知管理服务等。 7. 启动各种系统守护进程,如日志收集器、电量监控器等。
作者其他创作
大纲/内容
frameworks\\base\\core\\java\\com\\android\\internal\\os\\ZygoteInit.java
applicationInit()
pid = Zygote.forkSystemServer()
nativeForkSystemServer()
接下来就是启动Android的重头戏了,此时ZygoteInit的main()函数会调用startSystemServer(),该函数用于启动整个Android系统的系统服务。其大体做法是先fork一个子进程,然后在子进程中做一些初始化动作,继而执行SystemServer类的main()静态函数。需要注意的是,startSystemServer()并不是在函数体内直接调用Java类的main()函数的,而是通过抛异常的方式,在startSystemServer()之外加以处理的。
JNI
parsedArgs = new ZygoteConnection.Arguments(args);
ZygoteConnection.applyDebuggerSystemProperty(parsedArgs);ZygoteConnection.applyInvokeWithSystemProperty(parsedArgs);
frameworks\\base\\core\\jni\\com_android_internal_os_zygote.cpp
if (pid == 0)
redirectLogStreams();
fork()
commonInit();
RuntimeInit.zygoteInit()
closeServerSocket();
handleSystemServerProcess(parsedArgs);
nativeZygoteInit();
Zygote进程 (走进Java层)
com_android_internal_os_Zygote_nativeForkSystemServer
SystemServer进程
ForkAndSpecializeCommon()内部其实会调用fork(),而后设置gid、uid等信息。
frameworks\\base\\core\\java\\com\\android\\internal\\os\\RuntimeInit.java
frameworks\\base\\core\\java\\com\\android\\internal\\os\\Zygote.java
0 条评论
下一页