授课语音

Android 系统启动流程

Android 系统的启动过程是一个复杂的过程,涉及多个阶段和组件。以下是 Android 系统启动的主要流程,简要概述了从设备加电到 Android 系统完全启动并呈现 UI 的过程。

1. 设备加电(Power-On)

当设备加电时,硬件启动并开始执行一些初始的硬件自检程序。这通常由设备的 Bootloader 来完成,Bootloader 是设备的第一程序,用于初始化硬件,并将控制权交给 Android 的启动引导程序。

步骤:

  • 设备的 Bootloader 加载。
  • Bootloader 进行硬件自检和初始化。
  • Bootloader 将系统控制权交给 Linux 内核。

2. Linux 内核启动

在设备加电并通过 Bootloader 启动后,Linux 内核开始启动。此时,内核会加载硬件驱动、初始化设备管理器和内存管理等。

步骤:

  • Linux 内核加载,初始化内存、CPU、硬件设备等。
  • 启动 init 进程:Linux 内核启动后,系统会启动第一个用户进程 init。在 Android 中,init 进程负责进一步启动系统。

3. 启动 Init 进程

init 是 Android 系统的第一个用户进程,也是所有其他进程的祖先。Android 系统的初始化和服务启动都依赖于 init 进程。

步骤:

  • init 进程根据 /init.rc 配置文件加载系统服务。
  • 启动各种硬件和系统服务,如 servicemanagerZygote 等。

4. 启动 Zygote 进程

Zygote 是 Android 系统中所有应用进程的母进程。它负责初始化虚拟机(如 Dalvik 或 ART),并通过 fork() 创建新的进程来启动应用。

步骤:

  • init 进程启动 Zygote 进程。
  • Zygote 加载并初始化核心类库(如 Android 框架中的类)。
  • Zygote 准备好接收来自其他进程的请求,进行进程孵化。

5. 启动 SystemServer 进程

SystemServer 是 Android 系统的关键进程之一,负责启动和管理系统服务。SystemServer 启动后,会启动各种重要的系统服务,如 ActivityManagerService(AMS)、PackageManagerService(PMS)、WindowManagerService(WMS)等。

步骤:

  • Zygote 进程通过 fork() 创建 SystemServer 进程。
  • SystemServer 启动各类服务,包括管理应用、窗口、权限等服务。

6. 启动 ActivityManagerService (AMS)

ActivityManagerService 是管理应用程序、活动(Activity)、进程等的核心服务。它负责启动和调度应用程序以及其组件。

步骤:

  • SystemServer 启动 ActivityManagerService(AMS)。

  • AMS 通过启动 Activity 进程来处理应用的启动请求。

    此时,AMS 会检查是否有待启动的应用,如果有,它会通过 Zygote 启动应用进程。

7. 启动应用进程

应用进程是由 Zygote 通过 fork() 创建的,并加载应用的类和资源。应用进程开始时,系统会启动 ActivityThread,它负责管理应用的生命周期。

步骤:

  • Zygote 克隆出一个新的进程。
  • 新的应用进程加载应用的类和资源,启动 ActivityThread
  • ActivityThread 启动应用的主 Activity

8. 显示 UI(Activity 启动)

当应用进程准备好后,ActivityThread 会请求 WindowManagerService(WMS)显示应用的界面(即 Activity)。

步骤:

  • ActivityThread 启动应用的 MainActivity 或其他 Activity
  • ActivityThread 通过 WindowManager 获取窗口并将其显示在屏幕上。

9. 进入应用主界面

应用的主界面或 Activity 显示后,系统开始进入应用的生命周期管理,应用开始接受用户的输入和交互。

步骤:

  • 系统和应用开始交互,应用响应用户事件,处理后台任务等。
  • 用户开始与应用的 UI 进行交互,应用生命周期进入 onResume

10. 系统服务与应用交互

Android 系统的多个服务开始与应用交互,如网络服务、位置服务、消息服务等。应用与这些服务通过 IPC(进程间通信)机制进行交互。

步骤:

  • ActivityManagerService 管理应用的进程和任务。
  • 应用与各种系统服务进行通信,响应用户操作,执行后台任务。

总结

Android 系统的启动过程是从设备加电到完全启动并展示应用界面需要经过多个阶段。大致流程为:

  1. 设备加电 -> 2. Linux 内核启动 -> 3. init 进程启动 -> 4. 启动 Zygote 进程 -> 5. 启动 SystemServer 进程 -> 6. 启动 ActivityManagerService -> 7. 启动应用进程 -> 8. 显示 UI -> 9. 进入应用主界面 -> 10. 系统服务与应用交互。

在整个过程中,Zygote 进程是核心,负责应用进程的创建与启动,SystemServer 管理系统服务的启动,AMS 负责应用的生命周期管理。

去1:1私密咨询

系列课程: