zygote是java进程鼻祖 :分为native层 和 java层
native 层做了些什么
1、初始化android
2、注册jni
3、执行ZygoteInit.main,进入java层
java层做了什么
1、创建socket--
2、执行预加载--
3、通过fork创建SystemServer进程--
4、进入循环:等待AMS的通知,创建对应进程
ZygoteInit
1、进入main函数通过fork创建进程(frokSystemServer)
,通过反射执行SystemServer的main方法
进程有两个
-
父进程 Zygote进程
假如SystemServer的进程id是6000
Zygote的pid就是6000 返回值等于子id
SystemServer的pid就是0 没有子id就为0
-
子进程 SystemServer
2、初始化zygote(调用底层)
执行SystemServer的mai方法
SystemServer
进入main函数
1、创建系统上下文
- 创建一个ActivityThread线程
- 执行attach函数
- 创建SystemContext()
- 创建app(反射创建)
- 执行Application.onCreate();
2、创建系统服务
- 创建服务(服务继承SystemService)
- 启动服务
3、启动引导服务(AMS)
-
启动ATMS(android10新增)
-
启动AMS
-
创建AMS,管理ATMS
-
启动AMS
-
systemReady(AMS准备好)
-
启动Activity
-
两步检查(startSpecifiaActivity)
-
存在
-
添加事务
-
分发事务
-
ActivityThread分发事务
-
Handler分发消息
-
execute(执行)
-
handleLaunchActivity (处理消息,启动Acitivity)
-
performLaunchActivity
执行Activity的onCreate
-
不存在
- 创建进程
- 进程启动
- 启动zygote
- 创建socket
- 连接socket
- 进入zygote
- 循环等待,有消息,启动app进程
- 反射执行ActivityThread.main方法
- attachApplication(ApplicationThread,binder通信)
- realStartActivityLocked(真正启动)
4、启动核心服务(基本应用层用不上)
5、启动其它服务(WMS)
- 创建服务(服务继承SystemService)
- 启动服务
3、启动引导服务(AMS)
-
启动ATMS(android10新增)
-
启动AMS
-
创建AMS,管理ATMS
-
启动AMS
-
systemReady(AMS准备好)
-
启动Activity
-
两步检查(startSpecifiaActivity)
-
存在
-
添加事务
-
分发事务
-
ActivityThread分发事务
-
Handler分发消息
-
execute(执行)
-
handleLaunchActivity (处理消息,启动Acitivity)
-
performLaunchActivity
执行Activity的onCreate
-
不存在
- 创建进程
- 进程启动
- 启动zygote
- 创建socket
- 连接socket
- 进入zygote
- 循环等待,有消息,启动app进程
- 反射执行ActivityThread.main方法
- attachApplication(ApplicationThread,binder通信)
- realStartActivityLocked(真正启动)
4、启动核心服务(基本应用层用不上)
5、启动其它服务(WMS)
启动ATMS(android10新增)
启动AMS
-
创建AMS,管理ATMS
-
启动AMS
-
systemReady(AMS准备好)
-
启动Activity
-
两步检查(startSpecifiaActivity)
-
存在
-
添加事务
-
分发事务
-
ActivityThread分发事务
-
Handler分发消息
-
execute(执行)
-
handleLaunchActivity (处理消息,启动Acitivity)
-
performLaunchActivity
执行Activity的onCreate
-
-
不存在
- 创建进程
- 进程启动
- 启动zygote
- 创建socket
- 连接socket
- 进入zygote
- 循环等待,有消息,启动app进程
- 反射执行ActivityThread.main方法
- attachApplication(ApplicationThread,binder通信)
- realStartActivityLocked(真正启动)
-