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

  • 相关阅读:
    cocos2d-x Mask的实现及优化
    cocos2d-x CCTableView
    cocos2d-x CCScrollView
    网络服务端开发
    跨平台web调试代理工具---whistle
    探索c#之一致性Hash详解
    Redis性能问题排查解决手册
    Redis的Aof被阻塞原因调查
    AOF 持久化策略
    如何招到一个靠谱的程序员
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/6213435.html
Copyright © 2020-2023  润新知