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.启动各种系统服务。

  • 相关阅读:
    uva 10269(floyd+Dijkstra)
    Codeforces Round #223 (Div. 2) 解题报告
    uva 11280(Dijkstra+递推)
    uva 10246(变形floyd)
    闲来无事:跳台阶
    opencv和javacv版本不一致
    javaCV:爱之初体验
    mevan引入容联云通讯jar
    复杂度函数的表示
    MySQL与mabits大小比较、日期比较示例
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/6213435.html
Copyright © 2011-2022 走看看