Activity启动流程
1.BootLoader:
Bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,
从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境
2.Kernel初始化介绍
cpu初始化
初始化内存布局
设置系统初始化进程即0号进程
初始化每个处理器的可运行队列,设置系统初始化进程即0号进程
创建1号内核线程
3.创建init进程
init进程是Linux内核启动后创建的第一个用户空间的进程,init在初始化过程中会启动很多重要的守护进程。
自动Zygote进
4.Zygote进程
1.初始化AppRuntime
启动虚拟机
注册JNI
调用JNI函数 2.解析传入参数 3.根据参数启动zygote
5.ZygoteInit main()
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启动
在AMS的构造函数中初始化了很多变量和一些服务,如果管理广播的队列、电池和CPU等相关服务,服务会在start方法中启动,并等待启动完成。
最后,调用AMS的systemReady方法完成初始化,在SystemReady中启动桌面。
8.PackageManagerService启动
初始化相关服务 判断设备是否是第一次启动是通过判断文件data/system/packages.xml是否存在进行判断 首次开机和非首次开机区别就在于扫描app目录时,首次开机做了dex2ota的动作,相对来说就要较非首次开机耗时
9.Launcher启动介绍
SystemUI启动
SystemUI在AMS执行systemReady时启动,主要是通过Intent启动包名为com.android.systemui组件名为SystemUIService的服务
SystemUI启动成功后表示系统的通知栏和导航栏已经初始化成功,接下来就是启动Launcher
Launcher启动
Launcher的启动在AMS的最后,通过startHomeActivityLocked把启动Launcher的Activity
并将其置于Activity栈顶,然后通过resumeFocusedStackTopActivityLocked将栈顶的Activity显示到界面上,launcher的启动就已经完成了