Android 系统启动流程

  1. Power on:当设备处于关闭状态时,设备接通电源后处理器会开始启动先前嵌入在 ROM (只读存储载体) 中的小型程序,该程序被称为 bootloader。bootloader 负责进行引导加载程序,初始化部分硬件和外设,如 RAM、闪存和 USB 控制器等。
  2. Bootloader:一旦 bootlaoder 初始化完成,它将检查定义在它上面的内核映像 (zImage 或 Image) 文件,并将其载入内存。然后 bootloader 会跳到内核的执行点,并开始了解决定系统进程初始化方法的各种硬件信息。在这个阶段,内核会检测和初始化 RAM、CPU 和其他外围设备(例如 GPU、Wi-Fi 和蓝牙等)。同时,内核还会读取 DTB(Device Tree Blob 设备树)、LDTB(中间二进制格式的DTB)或者硬编码内置在设备启动板子里的配置信息,其中包括其他设备节点、驱动程序信息和开启自消息传递(utilty messages用来底层打印调试信息还可能作为缓存操作系统日志文件的设备节点), 以及与设备本身相关的其它参数和设置。
  3. Kernel:在完成第2步之后,在Android关键环节中一个非常至关重要的组成部分(内核)就被载入。在这个阶段,内核将启用初始化程序,它的主要功能是初始化各种从 bootloader 接收到的硬件信息和设备树中默认配置的硬件参数,以准备启动 init 进程。同时还需要检查文件系统、磁盘分区和其余的存储介质。
  4. Init 进程:每台 Android 设备都有一个 init 进程构成的进程树即 RC(init.rc, 由默认路径 /init.rc 给出) 启动环境,在内核初始化完成之后,Android 的初始化进程 init 将成为第一个用户空间进程。Init 进程有守护进程的角色,它根据 /init.rc 中定义的配置来启动各种系统服务。
  5. System Server 进程:init 进程启动的第一个重要子进程是 System Server,一个包含 Android 设备所有系统级服务的进程。System Server 进程首先创建对 Activity Manager (AM) 类的实例,并注册自身作为系统服务管理器。此后,System Server 进程调用其他系统服务的 addService() 方法,并使其相互绑定和建立依赖关系。
  6. Zygote 进程:Zygote 是运行在 Android 系统上的 Java 虚拟机。具体而言,它是虚拟机的一个特殊实例,可以通过共享面向对象的代码来加速应用程序的启动速度。当一个面向 Android 平台上运行的 Java 应用获取启动信号后,Android 框架内核会通过 zygote 创建应用,从而节省时间和内存。Zygote 进程负责孵化新应用程序进程。
  7. Launchers:设备的 Launcher 负责将 Android 的工具、组件和第三方应用程序组合在一起。Launchers 是应用启动器,可以改变系统的屏幕布局、显示页面等,它消除了用户访问存储在其他不同位置上的应用程序的需要。Launchers 通常是主屏幕或“桌面”,其中包括各种快捷图标以及在桌面上对其他重要资源的快速访问。
  8. 加载桌面:Launcher 进程负责在启动器上渲染家解直接到输出屏幕上完成显示,启动并创建各种软件窗口,并用于操作符等其它细节级别的 UI 交互部分。界面处理以硬件控制为主导(每个UI帧缓冲区刷新),同时也支持许多显式 API 函数,使普通开发者可以轻松深入访问视图层.presentation layer及相关逻辑模块。
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好,工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值