Android启动流程

Leon
2021-12-10 / 0 评论 / 36 阅读 / 正在检测是否收录...

output.jpg
init进程 –-> Zygote进程 –> SystemServer进程 –>应用进程

  • 1、启动电源以及系统启动:当电源按下时引导芯片从预定义的程序(固化在ROM)开始执行,加载引导程序BootLoader到RAM,然后执行。
  • 2、引导程序BootLoader:BootLoader是在Android系统开始运行前的一个小程序,主要用于把系统OS拉起来并运行。
  • 3、Linux内核启动:当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。当其完成系统设置时,会先在系统文件中寻找init.rc文件,并启动init进行。
  • 4、init进程启动:初始化和启动属性服务,并且启动Zygote进程。
  • 5、Zygote进程启动:创建JVM并为其注册JNI方法,创建服务器端Socket,启动SystemServer进程。
  • 6、SystemServer进程启动:启动Binder线程池和SystemServiceManager,并且启动各种系统服务。
  • 7、Launcher启动:被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到系统桌面上。
  1. 启动电源以及系统启动
    当电源按下时引导芯片代码会从预定义的地方(固化在ROM)开始执行,加载引导程序BootLoader到RAM,然后执行。
  2. 引导程序BootLoader
    它是Android操作系统开始运行前的一个小程序,主要将操作系统OS拉起来并进行。
  3. Linux内核启动
    当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。此外,还启动了Kernel的swapper进程(pid = 0)和kthreadd进程(pid = 2)。
  • swapper进程:又称为idle进程,系统初始化过程Kernel由无到有开创的第一个进程, 用于初始化进程管理、内存管理,加载Binder Driver、Display、Camera Driver等相关工作。
  • kthreadd进程:Linux系统的内核进程,是所有内核进程的鼻祖,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。
    当内核完成系统设置时,它首先在系统文件中寻找init.rc文件,并启动init进程。
  1. init进程
    init进程主要用来初始化和启动属性服务,并且启动Zygote进程。init进程是Linux系统的用户进程,是所有用户进程的鼻祖,进程号为1,它有许多重要的职责,比如创建Zygote孵化器和属性服务等。并且它是由多个源文件组成的,对应源码目录system/core/init中。
  • 1、创建和挂载启动所需的文件目录。
  • 2、初始化和启动属性服务。
  • 3、解析init.rc配置文件并启动Zygote进程。
  1. Zygote
    Zygote是在init进程启动时创建的,它又称为孵化器,它可以通过fork(复制进程)的形式来创建应用程序进程和SystemServer进程。并且,Zygote进程在启动的时候回创建DVM或者ART,因此通过fork而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM或者ART的实例副本。
  • 1、创建AppRuntime,执行其start方法,启动Zygote进程。。
  • 2、创建JVM并为JVM注册JNI方法。
  • 3、使用JNI调用ZygoteInit的main函数进入Zygote的Java FrameWork层。
  • 4、使用registerZygoteSocket方法创建服务器端Socket,并通过runSelectLoop方法等等AMS的请求去创建新的应用进程。
  • 5、启动SystemServer进程。
  1. SystemServer进程
    SystemService进程被创建后,主要的处理如下:
  • 1、启动Binder线程池,这样就可以与其他进程进行Binder跨进程通信。
  • 2、创建SystemServiceManager,它用来对系统服务进行创建、启动和生命周期管理。
  • 3、启动各种系统服务:引导服务、核心服务、其他服务,共100多种。应用开发主要关注引导服务ActivityManagerService、PackageManagerService和其他服务WindowManagerService、InputManagerService即可。
    SystemServer进程主要是用于创建系统服务的,例如AMS、WMS、PMS。这篇文章将从以下两个部分来对SystemServer进行分析:
  • Zygote处理SystemServer进程
  • SystemServer进程解析
  1. Launcher进程
    Android系统启动的最后一步就是启动了一个Launcher应用程序来显示系统中已经安装的应用程序。Launcher在启动的过程中会请求请求PMS返回系统中已安装的应用程序的信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,从而使得用户可以点击这些快捷图片来启动相应的应用程序。

Launcher作为Android系统的桌面,它的作用有两点:

  • 1、作为Android系统的启动器,用于启动应用程序。
  • 2、作为Android系统的桌面,用于显示和管理应用程序的快捷图标或者其它桌面组件。
0

评论 (0)

取消