1.BootLoader:java
Bootloader 就是在操做系统内核运行以前运行的一段小程序。经过这段小程序,咱们能够初始化硬件设备、创建内存空间的映射图,
从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操做系统内核准备好正确的环境
2.Kernel初始化介绍android
cpu初始化
初始化内存布局
设置系统初始化进程即0号进程
初始化每一个处理器的可运行队列,设置系统初始化进程即0号进程
建立1号内核线程
3.建立init进程小程序
init进程是Linux内核启动后建立的第一个用户空间的进程,init在初始化过程当中会启动不少重要的守护进程。
自动Zygote进
4.Zygote进程app
1.初始化AppRuntime
启动虚拟机
注册JNI
调用JNI函数 2.解析传入参数 3.根据参数启动zygote
5.ZygoteInit main()socket
1.建立ZygoteServer并启动 2.建立本地socket服务 3.预加载系统类和资源 4.fork SystemServer进程
6.SystemServer主要作的事情函数
1.调整时间 2.设置语言 3.初始化Looper为mainLooper 5.装载库:libandroid_server.so 6.初始化Context 7.建立SystemServiceManager负责系统Service启动 8.建立和启动java服务 9.调用Looper.loop()进入处理消息循环
10.启动AMS
11.启动PMS
7.ActivityManagerService启动oop
在AMS的构造函数中初始化了不少变量和一些服务,若是管理广播的队列、电池和CPU等相关服务,服务会在start方法中启动,并等待启动完成。
最后,调用AMS的systemReady方法完成初始化,在SystemReady中启动桌面。
8.PackageManagerService启动布局
初始化相关服务 判断设备是不是第一次启动是经过判断文件data/system/packages.xml是否存在进行判断 首次开机和非首次开机区别就在于扫描app目录时,首次开机作了dex2ota的动做,相对来讲就要较非首次开机耗时
9.Launcher启动介绍ui
SystemUI在AMS执行systemReady时启动,主要是经过Intent启动包名为com.android.systemui组件名为SystemUIService的服务
SystemUI启动成功后表示系统的通知栏和导航栏已经初始化成功,接下来就是启动Launcher
Launcher的启动在AMS的最后,经过startHomeActivityLocked把启动Launcher的Activity并将其置于Activity栈顶,而后经过resumeFocusedStackTopActivityLocked将栈顶的Activity显示到界面上,launcher的启动就已经完成了