我们在按下电源键到开机整个过程中系统是如何启动的呢
1.加载bootloader
按下电源时引导芯片代码从预定义的地方(固定rom)开始执行,加载引导程序bootloader到RAM执行
2.Linux内核启动
bootloader是Android系统运行前的一个小程序,目的是将系统os拉起来
3.启动init进程
Linux内核启动后,经过一系列系统设置并查找init.rc文件解析并启动init进程,init进程会初始化和启动属性服务,挂载目录,启动Zygote进程
4.Zygote进程启动
Zygote进程会创建Dvm,创建服务端socket等待ActivityManagerService请求Zygote创建新的应用程序进程,启动SystemServer进程
5.SystemServer进程启动
SystemServer进程启动Binder线程池来进行进程间通信,创建SystemServiceManager启动各种系统服务
6.启动Launcher
Launcher启动后会将已安装的应用程序图标显示在桌面上
启动流程图如下:
Binder线程池
Android进程间通信使用Binder机制,binder线程池用来进程间通信的
SystemServer进程
用来创建和管理各种系统服务如AMS,PMS等
Android系统启动何时进入Java框架层的呢?
init进程启动是通过app_main.cpp的main方法启动的,在main方法中通过AppRuntime的start方法启动init进,ApRuntime继承AndroidRuntime,在AndroidRuntime的start方法中用JNI的方式调用了ZygoteInit的main方法,此时就进入了Java框架层.
感谢
https://www.jianshu.com/p/46d9d625563a
https://www.jianshu.com/p/1d3e722871e8
https://blog.csdn.net/itachi85/article/details/56669808
网友评论