目录
一、Android 系统启动流程图
二、系统启动阶段
三、 系统重要进程
3.1 父进程
3.2 重量级进程
一、Android 系统启动流程图
备注:(图片引用gityuan)
二、系统启动阶段
- step1. 启动电源及系统:
电源按下后,引导芯片开始将固化在ROM中的BootLoader加载至RAM中,并执行该程序;
- step2. 引导程序BootLoader:
引导程序BootLoader是在Android操作系统开始运行前,执行的一个小程序,其主要作用是把系统OS拉起来并运行;
- step3. Linux内核启动:
内核启动时,设置缓存、被保护存储器、计划列表和加载驱动等,完成设置后,开始加载init.rc文件;
- step4. init进程启动:
开始初始化和启动属性服务,创建Zygote进程。
- step5. Systemserver启动:
初始化各种app 管理的服务,如AMS,WMS,PMS等等。
- step6. 各种系统APP、三方App 启动:
三、系统重要进程
3.1 父进程
在所有进程中,以父进程的姿态存在的进程,如下:
- idle进程:是Linux系统第一个进程(pid = 0 ),是init进程和kthreadd进程的父进程
- kthreadd进程 : 是所有内核进程的父进程
- init进程 : 是所有用户进程的父进程(或者父父进程)
- zygote进程 : 是所有上层Java进程的父进程,另外zygote的父进程是init进程。
3.2 重量级进程
在Android进程中,有几个非常重要的进程
- system_server:是由zygote孵化而来的,是zygote的首席大弟子,托起整个Java framework的所有service,比如ActivityManagerService, PowerManagerService等等。
- mediaserver:是由init孵化而来的,托起整个C++ framework的所有service,比如AudioFlinger, MediaPlayerService等等。
- servicemanager:是由init孵化而来的,是整个Binder架构(IPC)的大管家,所有大大小小的service都需要先请示servicemanager。