type
status
date
slug
summary
tags
category
icon
password
Android系统启动流程
本文主要讲解Android的启动流程,暂时不涉及代码的具体细节
零、启动过程概述
启动电源
:按下电源按键后。从预定义的地方开始执行,加载Bootloader到RAM并执行
Bootloader
:它是在操作系统内核运行之前到一段程序,初始化硬件设备,建立内存空间映射
Kernel
:启动内核后,设置缓存、计划列表、加载驱动、启动init进程等
init
:初始化和启动PropertService。启动zygote和ServiceManager进程
ztgote
:native层:启动VM并为VM注册JNI方法,调用ZygoteInit进入Java层;Java层:预加载类、库等资源,创建服务端Socket,启动SystemService进程
Launcher
:在SystemService.startOtherService
中的AMS.systeReady
中启动Launcher
一、开机
当我们按下电源键时,CPU会从只读存储器(ROM)的特定地址开始加载引导程序。这个过程涉及执行
Bootloader
代码,将其加载到内存(RAM)中,然后执行Bootloader
。Bootloader
虽然不属于Android系统的一部分,但它扮演着至关重要的角色。它的主要功能包括初始化硬件设备、引导系统开机和加载内核文件。这个角色类似于Windows系统(PC)中的BIOS程序。由于Bootloader
的具体工作内容较为复杂,本文不再详细阐述。二、Linux内核启动
Linux内核启动时,它会初始化各种软硬件环境,加载驱动程序,并挂载根文件系统等。内核启动完成后,它会在系统文件中寻找并启动
"init"
进程。这标志着Android世界的开启。三、init进程
init进程是Linux系统中用户空间的第一个进程,其进程号为1。它被称为root进程或所有进程的父进程。init进程有两项主要任务:
- 挂载目录,如/sys、/dev、/proc等
- 运行
init.rc
脚本。在解析init.rc
时,init进程会创建Zygote
进程
四、Zygote进程的创建
init进程在解析
init.rc
脚本时创建Zygote
进程。Zygote是建立真正Android运行空间的关键,是Android系统中最重要的进程之一
。Android中的所有应用进程都由Zygote进程Fork而来
,使Zygote成为Android系统所有进程的父进程。五、SystemServer进程的创建
Zygote进程做完初始化工作后,会启动SystemServer进程,该进程是framework的核心服务,与Zygote进程一样,它也是Android系统中
最重要的进程之一
SystemServer的主要作用是启动各种系统服务,比如:
ActivityManagerService
、PackageManagerServer
、WindowManagerService
以及硬件相关的Service等服务,我们平时用到的所有服务都是从SystemService启动的 ,这些服务都是运行在SystemService进程的不同线程中,我们需要用到的系统服务都是从SystemService进程通讯获取的六、系统启动完成
一旦系统服务在内存中跑起来了,Android 就完成了启动过程。在这个时候 “
ACTION_BOOT_COMPLETED
” 开机启动广播就会发出去借助网上的一张图来看Android系统启动流程: