Android启动流程分析(十二) SystemServer
16lz
2021-12-04
#############################################
本文为极度寒冰原创,转载请注明出处
#############################################
SystemServer也是系统的一个重要的守护进程,从SystemServer的进程中,我们看到了系统的各种关键的Service的启动。
另外,根据前面的zygote的分析,我们知道了systemServer在android的启动过程中是肯定要启动的。
因为在init.rc里面,已经指定了要start-system-server = true.
那么在zygote中,我们看到了如下的code
if (startSystemServer) { // 如果startSystemServer为true的话,我们会启动systemServer startSystemServer(abiList, socketName); }我们看到执行了startSystemServer的函数,那么我们来看一下这个函数的实现。
603 int pid;604605 try {606 parsedArgs = new ZygoteConnection.Arguments(args);607 ZygoteConnection.applyDebuggerSystemProperty(parsedArgs);608 ZygoteConnection.applyInvokeWithSystemProperty(parsedArgs);609610 /* Request to fork the system server process */611 pid = Zygote.forkSystemServer( // 从这边我们可以看到,systemServer是由Zygote给孵化出来的一个子进程612 parsedArgs.uid, parsedArgs.gid,613 parsedArgs.gids,614 parsedArgs.debugFlags,615 null,616 parsedArgs.permittedCapabilities,617 parsedArgs.effectiveCapabilities);618 } catch (IllegalArgumentException ex) {619 throw new RuntimeException(ex);620 }621622 /* For child process */623 if (pid == 0) { // 在孵化出来的子进程里面624 if (hasSecondZygote(abiList)) {625 waitForSecondaryZygote(socketName);626 }627628 handleSystemServerProcess(parsedArgs); // 会执行到handleSystemServerProcess的操作629 }通过上面的内容,我们可以很容易的知道,在system的启动过程中,是由zygote分裂出来的一个子进程进行处理的。
然后在子进程里面,执行handSystemServerProcess进行接下来的操作。
那么,handSystemServerProcess是在做什么呢?
这个过程我们用一个流程图来代替吧
相信这个流程图可以很清晰的表明system的启动过程,在invokeStaticMain函数后,我们进入到了systemServer的main函数中。
169 public static void main(String[] args) {170 new SystemServer().run();171 }这边就很简单易懂了。
在run函数中,通过下面的一些方法,去启动起来系统的其他关键进程。
252 // Start services.253 try {254 startBootstrapServices();255 startCoreServices();256 startOtherServices();257 } catch (Throwable ex) {258 Slog.e("System", "******************************************");259 Slog.e("System", "************ Failure starting system services", ex);260 throw ex;261 }而我们在接下来,会对系统framework中的各个关键进程进行详细的分析。
更多相关文章
- 【收藏】android WebView总结
- 【Android学习入门】Android中activity的启动模式
- Android(安卓)启动过程分析 (二)
- 如何让android apk 获得系统权限
- Android(安卓)UI学习 - Tab的学习和使用
- 创建SqliteDatabase
- 深入理解Android卷II
- 2013.12.23 (2)——— android 代码调用shell
- Android(安卓)AIDL 理解及开发要点