Android Framework系列之启动流程

393 阅读3分钟

前言

如何快速高效的掌握一门学问,建议先阅读下这篇文章关于学习的一些看法

码字不易,记得关注+点赞+收藏

Android Framework系列文章:

Android Framework系列之系统架构

Android Framework系列之启动流程

Android Framework系列之Binder机制

Android Framework系列之Handler机制

一、系统启动流程(熟记)

3ac69efc819d4bbd983fb082649b415f.png

  1. Boot ROM --> BootLoader (引导程序)

    • 按下电源->执行引导芯片代码(固化在ROM)->加载 使用BootLoader 到RAM 中后执行。
    • BootLoader主要用于引导操作系统启动。
  2. 启动Linux Kernel(内核)

    • 设置和管理系统核心服务,简记: 电动车进内网比较安全等(上一章节查看该说明)。
    • 在系统文件中查找并解析init.rc文件,然后启动init进程。
  3. 启动init进程 (天字1号进程)

    • 创建及挂载文件目录(启动所需)。
    • 初始化及启动属性服务。
    • 解析init.rc配置文件并启动zygote进程。
  4. 启动zygote进程

    • 创建AppRuntime并调用其start方法,启动zygote进程。
    • 创建JVM并为JVM注册JNI方法。
    • 通过JNI调用zygoteInit的main函数进入zygote的java框架层
    • 通过registerZygoteSocket方法创建服务器端socket,并通过 runSelectLoop方法等待AMS请求来创建新的应用程序进程。
    • 启动SystemServer进程
  5. 启动SystemServer进程

    • 启动Binder线程池(进程间通信基石)
    • 创建SystemServiceManager,管理系统服务的创建、启动和生命周期。
    • 启动AMSWMSPMS及其他服务。
  6. 启动Launcher

    • 作为应用的启动器,启动应用程序
    • 作为系统桌面,显示和管理应用程序的快捷图标和其他桌面组件

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

二、App启动流程(熟练掌握)

启动流程图:

简要说明:

  1. 点击Icon启动App,Launcher进程通过IPC向AMS发起startActivity请求;
  2. AMS接收到请求后,向zygote进程发送创建进程的请求;
  3. Zygote进程fork出新的子进程,即App进程;
  4. App进程通过IPC向SytemServer进程发起绑定Application请求;
  5. SytemServer进程在收到请求后,进行一系列准备工作后,再通过IPC向App进程发送scheduleLaunchActivity请求;
  6. App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
  7. 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。
  8. App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

AMS主要功能:
AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。还负责启动或杀死应用程序的进程。

WMS主要功能:
为所有窗口分配Surface。
管理Surface的显示顺序、尺寸、位置。
管理窗口动画。
输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息。

PWS主要功能:
PMS 用来管理跟踪所有应用APK,包括安装,卸载,解析,控制权限等。