Android 系统启动流程

Power on:当设备处于关闭状态时,设备接通电源后处理器会开始启动先前嵌入在 ROM (只读存储载体) 中的小型程序,该程序被称为 bootloader。bootloader 负责进行引导加载程序,初始化部分硬件和外设,如 RAM、闪存和 USB 控制器等。

Bootloader:一旦 bootlaoder 初始化完成,它将检查定义在它上面的内核映像 (zImage 或 Image) 文件,并将其载入内存。然后 bootloader 会跳到内核的执行点,并开始了解决定系统进程初始化方法的各种硬件信息。在这个阶段,内核会检测和初始化 RAM、CPU 和其他外围设备(例如 GPU、Wi-Fi 和蓝牙等)。同时,内核还会读取 DTB(Device Tree Blob 设备树)、LDTB(中间二进制格式的DTB)或者硬编码内置在设备启动板子里的配置信息,其中包括其他设备节点、驱动程序信息和开启自消息传递(utilty messages用来底层打印调试信息还可能作为缓存操作系统日志文件的设备节点), 以及与设备本身相关的其它参数和设置。

Kernel:在完成第2步之后,在Android关键环节中一个非常至关重要的组成部分(内核)就被载入。在这个阶段,内核将启用初始化程序,它的主要功能是初始化各种从 bootloader 接收到的硬件信息和设备树中默认配置的硬件参数,以准备启动 init 进程。同时还需要检查文件系统、磁盘分区和其余的存储介质。

Init 进程:每台 Android 设备都有一个 init 进程构成的进程树即 RC(init.rc, 由默认路径 /init.rc 给出) 启动环境,在内核初始化完成之后,Android 的初始化进程 init 将成为第一个用户空间进程。Init 进程有守护进程的角色,它根据 /init.rc 中定义的配置来启动各种系统服务。

System Server 进程:init 进程启动的第一个重要子进程是 System Server,一个包含 Android 设备所有系统级服务的进程。System Server 进程首先创建对 Activity Manager (AM) 类的实例,并注册自身作为系统服务管理器。此后,System Server 进程调用其他系统服务的 addService() 方法,并使其相互绑定和建立依赖关系。

Zygote 进程:Zygote 是运行在 Android 系统上的 Java 虚拟机。具体而言,它是虚拟机的一个特殊实例,可以通过共享面向对象的代码来加速应用程序的启动速度。当一个面向 Android 平台上运行的 Java 应用获取启动信号后,Android 框架内核会通过 zygote 创建应用,从而节省时间和内存。Zygote 进程负责孵化新应用程序进程。

Launchers:设备的 Launcher 负责将 Android 的工具、组件和第三方应用程序组合在一起。Launchers 是应用启动器,可以改变系统的屏幕布局、显示页面等,它消除了用户访问存储在其他不同位置上的应用程序的需要。Launchers 通常是主屏幕或"桌面",其中包括各种快捷图标以及在桌面上对其他重要资源的快速访问。

加载桌面:Launcher 进程负责在启动器上渲染家解直接到输出屏幕上完成显示,启动并创建各种软件窗口,并用于操作符等其它细节级别的 UI 交互部分。界面处理以硬件控制为主导(每个UI帧缓冲区刷新),同时也支持许多显式 API 函数,使普通开发者可以轻松深入访问视图层.presentation layer及相关逻辑模块。

相关推荐
hellokai1 小时前
React Native新架构源码分析
android·前端·react native
真西西1 小时前
Koin:Kotlin轻量级依赖注入框架
android·kotlin
CYRUS_STUDIO3 小时前
手把手教你改造 AAR:解包、注入逻辑、重打包,一条龙玩转第三方 SDK!
android·逆向
CYRUS_STUDIO4 小时前
Android 源码如何导入 Android Studio?踩坑与解决方案详解
android·android studio·源码阅读
前端赵哈哈5 小时前
初学者入门:Android 实现 Tab 点击切换(TabLayout + ViewPager2)
android·java·android studio
一条上岸小咸鱼8 小时前
Kotlin 控制流(二):返回和跳转
android·kotlin
Jasonakeke8 小时前
【重学 MySQL】九十二、 MySQL8 密码强度评估与配置指南
android·数据库·mysql
Mertrix_ITCH8 小时前
在 Android Studio 中修改 APK 启动图标(2025826)
android·ide·android studio
荏苒追寻8 小时前
Android OpenGL基础1——常用概念及方法解释
android
人生游戏牛马NPC1号9 小时前
学习 Android (十七) 学习 OpenCV (二)
android·opencv·学习