目录
3 Zygote进程创建应用程序进程,同时创建应用程序的Binder线程池
4 应用程序发送请求到AMS中,将ApplicationThread绑定AMS
6 ActivityThread的Handler处理启动Activity的请求
一 Android 系统启动流程(开机过程)
1.Bootloader引导
- 当电源按下时,引导芯片代码 从 ROM (4G)开始执行。Bootloader引导程序把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行,启动Linux内核
- Linux kernel内核启动,会做设置缓存,加载驱动等一些列操作
- 当内核启动完成之后,启动init进程,作为第一个系统进程,init进程从内核态转换成用户态
2.init进程启动
- 文件目录的创建及挂载,属性服务的创建
- fork出ServerManager子进程。 ServerManager主要用于管理我们的系统服务,他内部存在一个server服务列表,这个列表中存储的就是那些已经注册的系统服务
- 解析init.rc配置文件并启动Zygote进程
3 Zygote进程启动
在zygote进程中,它是Java层进程的鼻祖,其中,做了很多事情:
- 初始化AndroidRuntime环境
- 设置为zygote启动模式
- 启动zygoteInit 通过runtime.start(),在start函数中也做了很多事情
- startVm创建虚拟机
- startReg注册JNI方法
- 使用JNI调用ZygoteInit的main()函数,进入Java世界
在main方法中做了一些事情:
(1)预加载信息(加载了一部分framework资源以及常用的java类),加快了后面应用进程的启动速度(可以直接使用前面的预加载信息)
(2)创建Socket进程通信机制
(3)创建systemserver进程,执行systemserver main方法
(4)zygote进入无线循环,等待AMS给它发送通知,fork应用程序进程
4 SystemServer进程启动
在zygote进程创建system_server进程后,在system_server进程中我们启动了binder线程池ams,wms,等
通过反射调用SystemServer.main(),比较重要的几件事
1 加载动态库
2 创建系统上下文
3 创建SystemServerManager(这个是管理这些SystemServer的生命周期的),startServer()
3.1 反射创建服务
3.2 执行服务的onStart方法
3.3 返回该服务的对象
4 启