前言
如何快速高效的掌握一门学问,建议先阅读下这篇文章关于学习的一些看法。
码字不易,记得关注+点赞+收藏
Android Framework系列文章:
一、系统启动流程(熟记)
-
Boot ROM --> BootLoader(引导程序)- 按下电源->执行引导芯片代码(固化在ROM)->加载 使用
BootLoader到RAM 中后执行。 BootLoader主要用于引导操作系统启动。
- 按下电源->执行引导芯片代码(固化在ROM)->加载 使用
-
启动
Linux Kernel(内核)- 设置和管理系统核心服务,简记: 电动车进内网比较安全等(上一章节查看该说明)。
- 在系统文件中查找并解析
init.rc文件,然后启动init进程。
-
启动
init进程 (天字1号进程)- 创建及挂载文件目录(启动所需)。
- 初始化及启动属性服务。
- 解析
init.rc配置文件并启动zygote进程。
-
启动
zygote进程- 创建
AppRuntime并调用其start方法,启动zygote进程。 - 创建
JVM并为JVM注册JNI方法。 - 通过
JNI调用zygoteInit的main函数进入zygote的java框架层。 - 通过
registerZygoteSocket方法创建服务器端socket,并通过runSelectLoop方法等待AMS请求来创建新的应用程序进程。 - 启动
SystemServer进程
- 创建
-
启动
SystemServer进程- 启动
Binder线程池(进程间通信基石)。 - 创建
SystemServiceManager,管理系统服务的创建、启动和生命周期。 - 启动
AMS、WMS、PMS及其他服务。
- 启动
-
启动
Launcher作为应用的启动器,启动应用程序。作为系统桌面,显示和管理应用程序的快捷图标和其他桌面组件。
被
SystemServer启动的AMS会启动Launcher,Launcher启动后,会将已安装应用的快捷图标显示在界面上。
二、App启动流程(熟练掌握)
启动流程图:
简要说明:
- 点击Icon启动App,Launcher进程通过IPC向AMS发起startActivity请求;
- AMS接收到请求后,向zygote进程发送创建进程的请求;
- Zygote进程fork出新的子进程,即App进程;
- App进程通过IPC向SytemServer进程发起绑定Application请求;
- SytemServer进程在收到请求后,进行一系列准备工作后,再通过IPC向App进程发送scheduleLaunchActivity请求;
- App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
- 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。
- App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。
AMS主要功能:
AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。还负责启动或杀死应用程序的进程。
WMS主要功能:
为所有窗口分配Surface。
管理Surface的显示顺序、尺寸、位置。
管理窗口动画。
输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息。
PWS主要功能:
PMS 用来管理跟踪所有应用APK,包括安装,卸载,解析,控制权限等。