您的位置:首页 > 移动开发 > Android开发

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主界面 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: