Android 系统启动流程

Android 系统启动流程

Android架构图

在这里插入图片描述

系统启动流程

在这里插入图片描述

Android 系统启动分底层 Linux 内核启动和应用系统启动:

  • 底层系统启动:系统上电、bootloader启动、Linux内核启动、init进程启动。
  • 应用系统启动:Zygote进程启动、System Server启动。

完整启动流程:

  • 上电和自检(Power-On Self-Test, POST):
    • 当设备加电后,首先会执行一些基本的硬件自检,确保所有的硬件组件都正常工作。
  • BootLoader(引导加载程序):
    • BOOT ROM 会加载 Bootloader 到 RAM,然后把控制权交给 BootLoader。
    • BootLoader 的作用是初始化硬件设备,加载内核文件,然后启动内核。
  • Linux Kernel:
    • Linux 内核负责初始化各种软硬件环境,加载驱动程序,挂载根文件系统(/)等。
    • 内核启动完成后,它会在根文件系统中寻找 ”init” 文件,然后启动 init 进程。
  • init 进程:
    • init 进程是 Linux 系统中用户空间的第一个进程,进程号为 1,我们可以说它是 root 进程或者所有进程的父进程。
    • init 进程主要工作:
      • 挂载虚拟文件系统:如 /sys、/dev、/proc
      • 启动 property 服务
      • 启动 SELinux
      • 解析执行 init.rc 文件
  • Zygote 进程(孵化器):
    • init 进程在解析 init.rc 时,会创建 zygote 进程,它是 Android 系统最重要的进程之一。
    • zygote 是 Android 系统所有应用的父进程,后续 Android 中的 App 进程都是由 zygote 进程 fork 出来的。
    • Zygote 进程主要工作:
      • 创建虚拟机
      • 通过 AndroidRuntime 启动 ZygoteInit,ZygoteInit主要工作:
        • 创建 socket 服务,接受 ActivityManagerService 的应用启动请求
        • 加载 framework 资源
        • 启动System Server 进程
        • 监听 socket,当有启动应用请求到达,fork 生成 App 应用进程
  • System Server 进程:
    • 与 Zygote 进程一样,SystemServer 进程同样是 Android 系统中最重要的进程之一。
    • 主要工作:
      • 启动各种系统服务,如:ActivityManagerService,PackageManagerService,WindowManagerService 以及硬件相关的 Service 等服务,我们平时熟知的各种系统服务其实都是在 SystemServer 进程中启动的,这些服务都运行在同一进程(即 System Server 进程)的不同线程中,而当我们的应用需要使用各种系统服务的时候其实也是通过与 SystemServer 进程通讯获取各种服务对象的句柄进而执行相应的操作的。
  • Launcher(桌面应用程序):
    • SystemServer 进程再启动的过程中会启动PackageManagerService,PackageManagerService 启动后会将系统中的应用程序安装完成。
    • System Server 进程启动完所有的服务后,会调用各服务的 service.systemReady(…)。Launcher 的启动逻辑就在 ActivityManagerService.systemReady() 中。
  • BootAnimation 退出:
    • Launcher 启动完之后,我们还看不到 Launcher,因为被 BootAnimation 的画面挡住了。
    • 第一个应用起来之后,其 ActivityThread 线程进入空闲状态时,会通过某种机制把 BootAnimation 给退出。这里的第一个应用自然就是 Launcher了。这样就能确保在 BootAnimation 退出后,用户看到的不是黑屏,而是我们的桌面了。

参考资料

https://blog.csdn.net/shulianghan/article/details/39125439

https://juejin.cn/post/7316121883635023891

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值