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的启动就已经完成了

 

posted @ 2019-07-31 13:23  疯子FK  阅读(494)  评论(0编辑  收藏  举报