zoukankan      html  css  js  c++  java
  • Android系统启动流程(三)解析SystemServer进程启动过程

    1.Zygote启动SystemServer进程

    在上一篇文章中我们讲到在ZygoteInit.java的startSystemServer函数中启动了SyetemServer进程,如下所示。

    frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

    private static boolean startSystemServer(String abiList, String socketName)
                throws MethodAndArgsCaller, RuntimeException {
         ...
            if (pid == 0) {
                if (hasSecondZygote(abiList)) {
                    waitForSecondaryZygote(socketName);
                }
                handleSystemServerProcess(parsedArgs);
            }
            return true;
    }

    2.SystemServer进程启动过程

    启动Binder线程池

    3.解析SyetemServer进程

    我们先来查看SystemServer的main函数: 
    frameworks/base/services/java/com/android/server/SystemServer.java

    public static void main(String[] args) {
            new SystemServer().run();
    }
    
    main函数中只调用了SystemServer的run函数,如下所示。
    
    private void run() {
            ...
                System.loadLibrary("android_servers");//1
            ...
                mSystemServiceManager = new SystemServiceManager(mSystemContext);//2
                LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
            ...    
             try {
                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartServices");
                startBootstrapServices();//3
                startCoreServices();//4
                startOtherServices();//5
            } catch (Throwable ex) {
                Slog.e("System", "******************************************");
                Slog.e("System", "************ Failure starting system services", ex);
                throw ex;
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
            }
            ...
        }
    View Code

    4.总结SyetemServer进程

    SyetemServer在启动时做了如下工作: 
    1.启动Binder线程池,这样就可以与其他进程进行通信。 
    2.创建SystemServiceManager用于对系统的服务进行创建、启动和生命周期管理。 
    3.启动各种系统服务。

  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/6213435.html
Copyright © 2011-2022 走看看