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层的启动流程是一个复杂且高度交互的过程,涉及多个组件和服务。上述只是其中一些主要的组件和交互,实际上还有许多其他细节和子组件参与其中

相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui