android进程启动流程
2017-08-12 20:59
239 查看
一、整个android系统的进程启动流程如下:
init进程 –> Zygote进程(有些系统会有Zygote64进程,64bit) –> SystemServer进程 –>各种应用进程
init进程:linux的根进程,android系统是基于linux系统的,因此可以算作是整个android操作系统的第一个进程;在Linux中所有的进程都是由init进程直接或间接fork出来的。
Zygote进程:android系统的根进程,而当init进程创建之后,会fork出一个Zygote进程,这个进程是所有Java进程的父进程; 主要作用:Zygote进程fork出SystemServer进程和各种应用进程。
SystemService进程:Zygote进程fork出来
1)主要作用是启动各种系统服务,比如ActivityManagerService(AMS),PackageManagerService(PMS),WindowManagerService(WMS)服务等;
2)而当我们的应用需要使用各种系统服务的时候其实也是通过与SystemServer进程通讯获取各种服务对象的句柄的进而执行相应的操作的。
3)进程种的各种服务与其他应用交互是通过Binder机制(IPC)通讯的,与Zygote之间交互是通过socket通讯
4)创建的系统服务过程中主要通过SystemServiceManager对象来管理,SystemServer在执行过程中首先会初始化一些系统变量,加载类库,创建Context对象,创建SystemServiceManager对象等之后才开始启动系统服务;
各种应用进程:Zygote进程fork出来
二、Zygote进程启动流程:
init进程在启动Zygote进程时一般都会调用ZygoteInit类的main方法,Zygote进程mian方法主要执行逻辑:
初始化DDMS;
注册Zygote进程的socket通讯;
初始化Zygote中的各种类,资源文件,OpenGL,类库,Text资源等等;
初始化完成之后fork出SystemServer进程;
fork出SystemServer进程之后,关闭socket连接;
三、点击桌面图标启动新进程流程:
当我们点击桌面的APP图标时,Launcher进程会采用Binder的方式向AMS发出startActivity请求
AMS在接收到请求之后,就会通过Socket向Zygote进程发送创建进程的请求
Zygote进程会fork出新的子进程(APP进程)
之后APP进程会再向AMS发起一次请求,AMS收到之后经过一系列的准备工作再回传请求。
APP进程收到AMS返回的请求后,会利用Handler向主线程发送LAUNCH_ACTIVITY消息
主线程在收到消息之后,就创建目标Activity,并回调onCreate()/onStart()/onResume()等方法,UI渲染结束后便可以看到App主界面
init进程 –> Zygote进程(有些系统会有Zygote64进程,64bit) –> SystemServer进程 –>各种应用进程
init进程:linux的根进程,android系统是基于linux系统的,因此可以算作是整个android操作系统的第一个进程;在Linux中所有的进程都是由init进程直接或间接fork出来的。
Zygote进程:android系统的根进程,而当init进程创建之后,会fork出一个Zygote进程,这个进程是所有Java进程的父进程; 主要作用:Zygote进程fork出SystemServer进程和各种应用进程。
SystemService进程:Zygote进程fork出来
1)主要作用是启动各种系统服务,比如ActivityManagerService(AMS),PackageManagerService(PMS),WindowManagerService(WMS)服务等;
2)而当我们的应用需要使用各种系统服务的时候其实也是通过与SystemServer进程通讯获取各种服务对象的句柄的进而执行相应的操作的。
3)进程种的各种服务与其他应用交互是通过Binder机制(IPC)通讯的,与Zygote之间交互是通过socket通讯
4)创建的系统服务过程中主要通过SystemServiceManager对象来管理,SystemServer在执行过程中首先会初始化一些系统变量,加载类库,创建Context对象,创建SystemServiceManager对象等之后才开始启动系统服务;
各种应用进程:Zygote进程fork出来
二、Zygote进程启动流程:
init进程在启动Zygote进程时一般都会调用ZygoteInit类的main方法,Zygote进程mian方法主要执行逻辑:
初始化DDMS;
注册Zygote进程的socket通讯;
初始化Zygote中的各种类,资源文件,OpenGL,类库,Text资源等等;
初始化完成之后fork出SystemServer进程;
fork出SystemServer进程之后,关闭socket连接;
三、点击桌面图标启动新进程流程:
当我们点击桌面的APP图标时,Launcher进程会采用Binder的方式向AMS发出startActivity请求
AMS在接收到请求之后,就会通过Socket向Zygote进程发送创建进程的请求
Zygote进程会fork出新的子进程(APP进程)
之后APP进程会再向AMS发起一次请求,AMS收到之后经过一系列的准备工作再回传请求。
APP进程收到AMS返回的请求后,会利用Handler向主线程发送LAUNCH_ACTIVITY消息
主线程在收到消息之后,就创建目标Activity,并回调onCreate()/onStart()/onResume()等方法,UI渲染结束后便可以看到App主界面
相关文章推荐
- android源码解析之(十一)-->应用进程启动流程
- Android系统启动流程(二)解析Zygote进程启动过程
- Android系统启动流程(三)解析SyetemServer进程启动过程
- (OK) Android应用进程启动流程(Zygote进程与SystemServer进程)
- Android源码解析之(八)-->Zygote进程启动流程
- Android N Phone进程启动流程
- Android进程启动流程
- Android应用进程启动流程(Zygote进程与SystemServer进程)
- Android启动流程分析(三) init进程初窥
- Android Framework学习(五)之应用进程启动流程
- Android System进程启动流程
- android init进程启动的大致流程
- Android源码基础解析之SystemServer进程启动流程
- Android O Phone进程启动流程
- Android源码基础解析之Zygote进程启动流程
- android N进程启动流程(一)(捕获输入事件、准备创建activity、焦点切换)
- Android在新进程中启动 Service 的流程原理分析
- android N进程启动流程(二)(上一个activity的暂停、进程启动、绑定进程与创建application)
- Android源码(1) --- Zygote进程启动流程
- android源码解析之(九)-->SystemServer进程启动流程