Android 系统的启动过程

Android 系统的启动流程:

  • RomBoot(只读存储器引导程序):这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化,确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要,因为它为整个启动过程奠定了基础。
  • SPL(Secondary Program Loader):这是一种小型专用引导程序,负责加载主引导程序(如u-boot)。SPL提供比RomBoot更高级的功能,并为u-boot准备系统环境。它确保系统能够平滑过渡到下一个启动阶段。
  • u-boot(通用引导加载程序):u-boot是嵌入式系统中常用的功能丰富的引导加载程序。它负责加载Linux内核,设置初始硬件环境,并提供各种引导选项和配置。u-boot确保Linux内核在正确的硬件环境中启动,并为后续的系统初始化做好准备。
  • Linux内核启动:一旦u-boot加载了Linux内核,内核就会开始启动。内核启动过程中,它会挂载根文件系统,这是操作系统运行所必需的。文件系统包含了操作系统运行所需的各种程序、库和配置文件。
  • 启动init程序:init程序是Android系统中的第一个用户空间进程,它负责初始化系统服务和设置运行级别。init程序会根据Android系统的初始化脚本(如init.rc)来启动和配置各种系统服务。
  • 启动Zygote进程:Zygote是Android系统中的一个特殊进程,它是所有应用进程的父进程。当Zygote启动时,它会加载并初始化Android运行时环境(如Dalvik或ART虚拟机),并预加载一些常用的类和资源。这样,当后续的应用进程启动时,它们就可以共享这些已经加载的类和资源,从而提高启动速度。
  • 启动SystemServer系统服务:SystemServer是Android系统中的核心服务进程,它负责启动和管理各种系统级的服务,如ActivityManagerService(负责活动管理)、PackageManagerService(负责应用包管理)等。这些服务为应用程序提供必要的系统功能和资源。
  • 启动Launcher:Launcher是Android系统的桌面应用程序,它负责显示设备的主屏幕和应用程序列表。当Launcher启动时,用户就可以开始与设备进行交互了。
  • 启动应用程序:在文件系统挂载、系统服务初始化以及Launcher启动之后,系统就可以开始运行用户空间的应用程序了。这些应用程序可以是预装的,也可以是用户后来安装的。

Framework层的启动流程

在Android系统中是一个复杂且关键的过程,涉及多个组件和服务的启动、初始化以及相互交互。以下是Framework层启动流程的详细概述:

一、Init进程启动

  1. Init进程加载:Init进程是Linux内核启动后的第一个用户空间进程。它负责读取并解析init.rc等初始化脚本,这些脚本定义了系统启动过程中需要执行的各种任务。
  2. 挂载文件系统:Init进程会挂载必要的文件系统,如根文件系统、系统分区等,以确保后续进程能够访问到必要的文件和目录。
  3. 设置安全策略:Init进程还会设置系统的安全策略,如SELinux策略,以确保系统的安全性。

二、Zygote进程启动

  1. 创建Zygote进程:Init进程根据配置脚本创建Zygote进程。Zygote进程是Android系统中所有Java应用的父进程。
  2. 加载Android运行时:Zygote进程会加载Android运行时环境(ART或Dalvik),为后续的Java应用提供运行环境。
  3. 预加载共享资源:为了加快应用启动速度,Zygote进程会预加载一些常用的类和资源,这些资源可以被后续的应用进程共享。

三、SystemServer启动

  1. SystemServer进程创建:Zygote进程孵化出SystemServer进程,它是Android框架层的核心。
  2. 启动系统服务:SystemServer负责启动和管理各种系统级服务,如ActivityManagerService(AMS)、PackageManagerService(PMS)、WindowManagerService(WMS)等。这些服务为应用程序提供了必要的系统功能和资源。

四、服务初始化与交互

  1. 服务初始化:各个系统服务在启动后进行初始化操作,包括加载配置、创建数据结构、注册监听器等。
  2. 服务交互:服务之间会进行交互和协作,以确保系统功能的正常运行。例如,AMS会与WMS交互以管理应用的窗口显示,PMS会与其他服务交互以管理应用的安装和卸载。

五、应用进程管理

  1. 应用进程创建:当有应用需要启动时,AMS会根据请求创建应用进程。这些应用进程由Zygote进程孵化出来,并继承其已加载的Android运行时和共享资源。
  2. 进程管理:AMS负责管理应用进程的生命周期,包括进程的启动、停止、销毁等操作。

Framework层的启动流程在Android系统中涉及多个关键组件和交互。这些组件共同协作,确保系统的正常运行和应用程序的启动。以下是一些主要的组件和它们之间的交互:

主要组件

  1. SystemServer
    • ActivityManagerService (AMS):管理应用程序的生命周期、任务栈和进程。
    • PackageManagerService (PMS):管理应用程序的安装、卸载和权限。
    • WindowManagerService (WMS):管理窗口的创建、布局和输入事件。
    • 其他服务:如电源管理服务、网络管理服务、通知服务等。
  2. Zygote进程
    • 负责加载Android运行时环境(ART或Dalvik)。
    • 作为所有应用进程的父进程,提供共享资源以加速应用启动。
  3. Init进程
    • 负责系统初始化,启动Zygote和SystemServer等关键进程。
    • 挂载文件系统,设置安全策略等。
  4. Binder IPC机制
    • 用于不同进程之间的通信,特别是系统服务和应用进程之间的通信。

主要交互

  1. SystemServer与AMS交互
    • SystemServer启动AMS,AMS管理应用进程的生命周期和状态。
    • 应用进程启动或停止时,AMS会与Zygote交互以创建或销毁进程。
  2. AMS与WMS交互
    • 当应用需要显示窗口时,AMS会与WMS交互以请求窗口的创建和管理。
    • WMS负责窗口的布局、渲染和输入事件处理。
  3. PMS与其他服务交互
    • PMS在应用安装或卸载时更新应用列表和权限信息。
    • 其他服务(如AMS)可以查询PMS以获取应用信息或验证权限。
  4. SystemServer与其他系统服务交互
    • SystemServer作为中心协调者,启动和管理其他系统服务。
    • 这些服务之间通过Binder IPC进行通信和协作。
  5. Zygote与应用进程交互
    • 当AMS请求创建新应用进程时,Zygote会孵化出该进程,并加载必要的类库和资源。
    • 应用进程通过Binder IPC与SystemServer中的服务进行通信。

需要注意的是,Framework层的启动流程是一个复杂且高度交互的过程,涉及多个组件和服务。上述只是其中一些主要的组件和交互,实际上还有许多其他细节和子组件参与其中

相关推荐
众拾达人3 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
吃着火锅x唱着歌4 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
_Shirley5 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙
hedalei7 小时前
RK3576 Android14编译OTA包提示java.lang.UnsupportedClassVersionError问题
android·android14·rk3576
锋风Fengfeng7 小时前
安卓多渠道apk配置不同签名
android
枫_feng7 小时前
AOSP开发环境配置
android·安卓
叶羽西8 小时前
Android Studio打开一个外部的Android app程序
android·ide·android studio
qq_171538859 小时前
利用Spring Cloud Gateway Predicate优化微服务路由策略
android·javascript·微服务
Vincent(朱志强)10 小时前
设计模式详解(十二):单例模式——Singleton
android·单例模式·设计模式
mmsx11 小时前
android 登录界面编写
android·登录界面