您的位置:首页 > 其它

深入浅出理解Activity启动流程

2017-04-24 11:30 176 查看
源码的流程比较复杂,深入理解之前,先以最简化的形式梳理下:

以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下

安全检查如锁屏密码

然后就是到了手机解锁界面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: