Android系统启动流程

本文详细介绍了安卓设备启动过程,包括引导程序、Linux内核启动、init进程、Zygote进程的孵化和SystemServer的启动,以及Launcher的加载,展示了系统从休眠到运行的复杂而有序的步骤。
摘要由CSDN通过智能技术生成
当我们按下安卓设备的电源按钮时,一个经过精心设计的启动流程开始了。这个流程由多个关键步骤组成,其目标是将系统从关机状态启动到正常运行状态。在本文中,我们将详细介绍安卓系统的启动流程。

1. 启动电源以及系统启动

        当电源被启动时,引导芯片载入了预定义的引导程序(固化在ROM中),并将引导程序BootLoader加载到RAM中开始执行。

2. 引导程序BootLoader

        BootLoader是一个小程序,其主要作用是引导安卓系统,并将其运行起来。

3. Linux内核启动

        在内核启动时,系统设置了缓存、保护存储器、调度列表,并加载了各种驱动。完成系统设置后,内核会搜索init.rc文件,并启动init进程。

4. init进程启动

        init进程是系统启动时的第一个用户空间进程。它完成了许多重要的初始化工作,包括1.创建和挂载启动所需的文件目录、2.初始化和启动属性服务,以及3.启动Zygote进程。

下面详细说明三个重要的步骤:

  1. 创建和挂载启动所需的文件目录:
    在系统启动过程中,init进程首先会创建和挂载所需的文件目录,这些目录包括根目录、/proc、/sys等,以确保系统能够正常运行和提供所需的资源和环境。

  2. 初始化和启动属性服务:
    Android系统中的属性服务用于存储系统的属性信息,这些信息可以用于配置系统的行为和特性。init进程在启动时会初始化并启动属性服务,这确保了系统能够根据需要正确配置自身,并提供正确的服务。

  3. 解析init.rc配置文件并启动Zygote进程:
    init进程会解析init.rc配置文件,该文件描述了系统在启动时需要进行的各种操作,包括启动系统服务、挂载文件系统等。其中,init.rc文件中的一项重要任务是启动Zygote进程。Zygote进程是Android系统中的一个重要进程,它是所有应用程序的起点,任何新应用程序的进程都是由Zygote进程来孵化和启动的。

5. Zygote进程启动

        Zygote进程是Android系统的关键进程,其主要工作包括创建Java虚拟机并为其注册JNI方法,创建服务器端Socket以便接收请求,并启动SystemServer进程。

Zygote进程的启动过程涉及了一系列关键步骤,这些步骤为Android应用程序的快速启动和运行奠定了基础。

  1. init启动zygote时主要是调用app_main.cpp的main函数中的AppRuntime的start方法来启动zygote进程,AppRuntime负责管理应用程序的运行环境,包括应用程序的启动和生命周期管理。通过调用start方法,Zygote进程开始正式启动,为后续应用程序的启动和运行做好准备。

  2. 创建Java虚拟机并为Java虚拟机注入JNI方法:
    作为Android应用程序的基石,Java虚拟机(JVM)是整个Android系统的核心组成部分。在Zygote启动过程中,会创建Java虚拟机,并为其注入JNI(Java Native Interface)方法,这些方法用于实现Java与本地代码(C/C++)的互操作。通过这一步骤,Zygote为后续应用程序提供了Java运行环境的支持。

  3. 通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层:
    通过JNI调用ZygoteInit的main函数,Zygote进程进入其Java框架层。ZygoteInit负责系统服务和应用进程的启动,它负责在应用程序启动时进行一系列初始化操作,为新应用程序的进程创建做好准备。

  4. 通过registerZygoteSocket方法创建服务器端Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程:
    Zygote进程通过registerZygoteSocket方法创建服务器端Socket,这允许ActivityManagerService(AMS)向Zygote进程发送请求,请求创建新的应用程序进程。随后,Zygote进程通过runSelectLoop方法等待AMS的请求,一旦收到请求,就会创建新的应用程序进程,从而实现应用程序的快速启动。

当 Zygote 进程完成前述步骤后,其接下来的工作便是启动 SystemServer 进程。SystemServer 是 Android 系统中一个非常重要的进程,负责启动并管理系统的各项核心服务。

6. SystemServer进程启动

        SystemServer是Android系统中的一个重要进程,负责启动并管理系统的各项核心服务。它负责启动Binder线程池和SystemServiceManager,并启动各种系统服务。

详细来说启动通常包括以下几个主要步骤:

  1. 创建 SystemServer 实例: Zygote 进程在启动 SystemServer 之前会创建 SystemServer 的实例。

  2. 调用 SystemServer 的 main 方法: Zygote 进程通过调用 SystemServer 实例的 main 方法来启动 SystemServer 进程。

  3. 初始化系统服务: SystemServer 进程在启动时会初始化各种系统服务,包括但不限于包管理器(PackageManagerService)、窗口管理器(WindowManagerService)、通知管理器(NotificationManagerService)、ActivityManager 等。

  4. 注册核心系统服务: SystemServer 进程负责注册核心的系统服务,以便其他应用程序或组件可以与这些服务进行通信和交互。

  5. 启动其他关键进程: 除了系统服务外,SystemServer 进程还可能启动其他重要的系统组件和进程,例如安全性相关的服务或者底层系统管理进程。

        通过这些步骤,SystemServer 进程在 Android 系统启动过程中扮演着至关重要的角色。它的启动是 Android 系统初始化过程中的最后一步,确保系统各项核心服务的正常运行,并为后续应用程序和用户体验提供了强大的基础支持。

7. Launcher启动

        SystemServer进程启动后,会启动ActivityManagerService(AMS),并由AMS启动Launcher。Launcher负责将已安装的应用程序的快捷图标显示到用户界面上,使用户可以轻松访问和启动应用程序。

        通过这一系列的步骤,安卓系统完成了从启动到正常运行的整个过程。每个步骤都是系统正常运行的关键组成部分,确保了系统在启动后能够顺利运行,并为用户提供无缝的使用体验。这个复杂而又精妙的启动流程是安卓系统高效运行的基础,也是我们每天使用安卓设备时很少关注却随时在发挥作用的重要环节。

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值