美文网首页
简述Android系统启动流程

简述Android系统启动流程

作者: 会思考的鸭子 | 来源:发表于2021-01-10 08:45 被阅读0次

说明:本文内容主要参考《Android进阶解密》

一、启动电源以及系统启动

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

二、引导程序BootLoader

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

三、Linux内核启动

当内核启动时、设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置时,它首先在系统文件中寻找init.rc文件,并启动init进程。

四、init进程启动

init进程启动做了很多工作,总的来说主要做了以下三件事:

  1. 创建和挂载启动所需的文件目录
  2. 初始化和启动属性服务
  3. 解析init.rc配置文件并启动Zygote进程

五、Zygote进程启动

  1. 创建AppRutime并调用其start方法,启动Zygote进程(fork方式)
  2. 创建java虚拟机并为java虚拟机注册JNI方法
  3. 通过JNI调用ZygoteInit的main函数进入Zygote的java框架层
  4. 通过registerZygoteSocket方法创建服务端socket,并通过runSelectLoop方法等待AMS的请求来创建应用程序
  5. 启动SystemServer进程

六、SystemServer进程启动

SystemServer进程也是通过fork自身方式创建的,会复制Zygote的地址空间,所以也会得到虚拟机、socket之类的的拷贝,不过socket是用不到的,所以会调用关闭socket的方法。

SystemServer进程被创建之后,主要做了如下工作:

  1. 创建PathClassLoder,Android的一种类加载器,主要用于安装好的应用的dex文件加载
  2. 启动Binder线程池,这样就可以与其他进程进行通信
  3. 创建SystemServiceManager,用于对系统的服务进行创建、启动和生命周期管理
  4. 启动各种系统服务

ps:这里多提一点,在第1、2之后,SystemServer的main方法还没有调用,一般来说main方法是作为方法或程序的入口,由于一开始已经完成了第1、2两点,所以系统采用抛异常的方式(在抛出异常之后,通过反射方法找到类),来调用SystemServer的main方法,这样可以清除main方法之前的堆栈帧,让main方法看起来就像入口方法一样,接着进行第3、4步。

顺便再提一句,其实创建应用进程和创建SystemServer进程的方式是类似的,fork Zygote自身,关闭Zygote端的soket,创建binder进程,抛异常并通过反射启动main方法。

七、Launcher启动

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

八、最后贴一下Android系统启动流程图

Android系统启动流程图

相关文章

  • 从手机启动到View显示

    Android系统启动流程 Android系统启动流程: Activity启动流程 Activity启动流程: 触...

  • Android系统开机启动流程简述

    Android系统启动简述 Android系统开机流程基于Linux系统,总体可分为三个阶段: Boot Load...

  • Android进阶面试题

    1. Android系统启动流程是什么? ==Android系统核心流程==: ==启动电源以及系统启动==:当电...

  • 知识梳理 - "博"采众长

    Android 使用&原理&源码分析 系统启动流程 Android源码研究——Android系统启动 Binder...

  • Android系统启动流程

    android系统启动流程+activity启动流程 参考: Android进阶解密android源码

  • 简述Android系统启动流程

    说明:本文内容主要参考《Android进阶解密》 一、启动电源以及系统启动 当电源按下时引导芯片代码从预定义的地方...

  • Linux系统启动及定制过程

    1、简述linux操作系统启动流程 1.1 Centos5、Centos6系统启动过程 CentOS的启动流程总体...

  • Android 7.1.2(Android N) Android

    Android 7.1.2(Android N) Android系统启动流程 @(izhoujinjian)高清原...

  • Linux学习博客7

    简述linux操作系统启动流程 以CentOS 5、6为例系统启动流程大体可以表示为POST加电自检-->BIOS...

  • Android 系统启动流程

    Android 系统启动流程 本文基于android8.0系统源码来分析 系统启动大致流程图分析,一图以蔽之: 其...

网友评论

      本文标题:简述Android系统启动流程

      本文链接:https://www.haomeiwen.com/subject/ahhkaktx.html