Activity启动流程

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启动

SystemUI在AMS执行systemReady时启动,主要是经过Intent启动包名为com.android.systemui组件名为SystemUIService的服务
SystemUI启动成功后表示系统的通知栏和导航栏已经初始化成功,接下来就是启动Launcher

Launcher启动

Launcher的启动在AMS的最后,经过startHomeActivityLocked把启动Launcher的Activity并将其置于Activity栈顶,而后经过resumeFocusedStackTopActivityLocked将栈顶的Activity显示到界面上,launcher的启动就已经完成了
相关文章
相关标签/搜索