zoukankan      html  css  js  c++  java
  • Android 系统启动流程

    FvhQ-kudaksqxY83o4Jz6I9N17lu

    启动电源以及系统启动

    当电源按下时引导芯片代码从预定义的地方(固化在ROM)开始执行。加载引导程序BootLoader到RAM,然后执行。

    引导程序BootLoader

    引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统Linux kernel拉起来并运行。

    Linux内核启动

    当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。

    当内核完成系统设置时,它首先在系统文件中寻找init.rc文件,并启动init进程。

    init进程启动

    初始化和启动属性服务,并且启动Zygote进程。

    (1)创建和挂载启动所需的文件目录

    (2)初始化和启动属性服务。

    (3)解析init.rc配置文件并启动Zygote进程。

    Zygote进程启动

    创建Java虚拟机并为Java虚拟机注册JNI方法,创建服务器端Socket,启动SystemServer进程。

    在我们通过JNI调用ZygoteInit的main方法后,Zygote便进入了Java框架层,此前是没有任何代码进入Java框架层的,

    换句话说是Zygote开创了Java框架层

    (1)创建AppRuntime并调用其start方法,启动Zygote进程。

    (2)创建Java虚拟机并为Java虚拟机注册JNI方法。

    (3)通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层。

    (4)通过registerZygoteSocket方法创建服务器端Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程。

    (5)启动SystemServer进程。

    SystemServer进程启动

    启动Binder线程池SystemServiceManager,并且启动各种系统服务。

    SystemServer进程主要用于创建系统服务,我们熟知的AMS、WMS和PMS都是由它来创建的

    (1)启动Binder线程池,这样就可以与其他进程进行通信。

    (2)创建SystemServiceManager,其用于对系统的服务进行创建、启动和生命周期管理。

    (3)启动各种系统服务。

    Launcher启动

    被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。

    通俗来讲Launcher就是Android系统的桌面,它的作用主要有以下两点:

    (1)作为Android系统的启动器,用于启动应用程序。

    (2)作为Android系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件。

  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/lukelmouse/p/14517249.html
Copyright © 2011-2022 走看看