#############################################

本文为极度寒冰原创,转载请注明出处

#############################################

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中的各个关键进程进行详细的分析。

更多相关文章

  1. 【收藏】android WebView总结
  2. 【Android学习入门】Android中activity的启动模式
  3. Android(安卓)启动过程分析 (二)
  4. 如何让android apk 获得系统权限
  5. Android(安卓)UI学习 - Tab的学习和使用
  6. 创建SqliteDatabase
  7. 深入理解Android卷II
  8. 2013.12.23 (2)——— android 代码调用shell
  9. Android(安卓)AIDL 理解及开发要点

随机推荐

  1. android studio 项目的版本问题
  2. android 从matrix获取处理过的图片的实际
  3. android常用adb命令
  4. Android 统一View样式,textview样式
  5. Android的权限机制总结
  6. Android横竖屏加载不同布局的适配方案
  7. Android 编程权威指南 阅读笔记
  8. Android 2-10 RecyclerView
  9. 【原版的:参赛作品】窥秘懒---android打开
  10. Android Property Animation属性动画初识