深入浅出理解Activity启动流程

源码的流程比较复杂,深入理解之前,先以最简化的形式梳理下:
以android5.1分析
android系统是基于Linux内核,所以在启动的时候会先去加载Linux内核,内核启动时会去加载
各种驱动以及其他数据结构。
android的第一个进程是初始化进程init,在源码中是init.c,init.c在源码中有多个,我们需要
阅读的是内核core的init.c文件,注意包名为(system\core\init)
init.c主要做的工作是:创建目录,挂载磁盘,初始化日志系统,初始化配置文件,以及硬件层(然后后面是很多的队列等待,等待初始化完成,以及一些初始化失败的处理)
然后进入init.rc配置文件,该文件做的工作比较重要,
1.文件系统的初始化,变更权限
2.服务的启动,例如网络模块服务
3.重点,孵化器服务zygote,进程的出现都是由孵化器完成的,该文件是c++文件App_main.cpp,主要做的工作有:
参数初始化,初始化安卓运行时环境,初始化一些重要参数,然后开始启动android的代码
ZygoteInit.java
所在包是android.internal.os下,发现构造方法私有,但是有一个main方法
主要做的工作:孵化器的socket注册,预加载perload()
预加载类,资源,OpenGl等
启动安卓系统服务
1.参数初始化,SystemServer,初始化时间,looper(Looper.perpareMainLooper())开始轮询
然后进入nativeInit方法,主要启动传感器服务sensorService,硬件初始化
然后是电源相关启动,显示,应用管理器,服务管理器,系统设置服务,
wifi通知等等,lancher服务

然后开始ActivityManagerService.java
路径在framework下
安全检查如锁屏密码
然后就是到了手机解锁界面

你可能感兴趣的:(深入浅出理解Activity启动流程)