Android的init/Zygote/SystemServer
Android手机先开机,init/Zygote/SystemServer,然后启动Framework,然后启动Launcher;【安装APP(PMS),】然后启动APP(AMS)。所有的Android应用进程都是有Zygote进程fork出来的。
Android系统启动流程(一)解析init进程- http://blog.csdn.net/itachi85/article/details/54783506
Android系统进程Zygote启动过程的源代码分析- http://blog.csdn.net/luoshengyang/article/details/6768304
Framework启动过程浅析- https://blog.csdn.net/xsf50717/article/details/47167989
Android系统默认Home应用程序(Launcher)的启动过程源代码分析- http://blog.csdn.net/luoshengyang/article/details/6767736
Android应用程序安装过程(PMS)源代码分析- http://blog.csdn.net/luoshengyang/article/details/6766010
Android应用程序进程启动过程(AMS)的源代码分析- http://blog.csdn.net/luoshengyang/article/details/6747696
PackageManagerService启动流程源码解析- http://blog.csdn.net/u012124438/article/details/54882771
Android内核解读-应用的安装过程- http://blog.csdn.net/singwhatiwanna/article/details/19578947
Android apk动态加载机制的研究- http://blog.csdn.net/singwhatiwanna/article/details/22597587
Android源码分析-资源加载机制- http://blog.csdn.net/singwhatiwanna/article/details/24532419
Android窗口管理服务WindowManagerService - http://blog.csdn.net/luoshengyang/article/details/8462738
-- Android Fork进程,Fork Android App进程,Android 之 zygote 与进程创建。
Android 的开机流程:init-> zygote-> system_service,这个很重要,学习这个过程,你可以学习到 Android 是一个分层的系统,对 Android 的整体架构会有了解。
-
init->Zygote->SystemServer->启动App Activity;
-
init-> Zygote->SystemServer-> AMS PMS等。
-- 在android运行环境中,Zygote进程是所有虚拟机进程的父亲,Zygote进程在开机初始化的时候会创建一个虚拟机,AMS发消息给Zygote创建的时候实际上是copy一份虚拟机的实例在子进程中。同时在初始化的时候还会注册一些android核心Jni的库放在虚拟机实例内提供上层api调用。fork出的虚拟机会共享这些jni类库。 那么实际上XPosed就是在root后对替换/system/bin/app_process并将注入XposedBridge.jar。app_process是用来控制Zygote的,通过替换成修改后的 app_process可以使Zygote进程加载到我们的XposedBridege.jar。而这个库就是用来做动态Hook java代码造成劫持的。
认识Zygote- 认识Zygote_zygote 是用什么写的-CSDN博客
zygote主要用来孵化system_server进程和应用程序进程。在孵化出第一个进程system_server后通过runSelectLoopMode等待并处理消息,分裂应用程序进程仍由system_server控制。
init 是 zygote的父进程, 而system_server和其他所有的com.xxx结尾的app应用程序都是从zygote fork 而来。
系统中的两个重要服务PackageManagerService和ActivityManagerService,都是由SystemServer进程来负责启动的,而SystemServer进程本身是Zygote进程在启动的过程中fork出来的。
在Linux系统中,所有的进程都是init进程的子孙进程,也就是说,所有的进程都是直接或者间接地由init进程fork出来的。Zygote进程也不例外,它是在系统启动的过程,由init进程创建的。
Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制。
-- 在android中,大部分的应用程序进程都是由zygote来创建的,为什么用大部分,因为还有一些进程比如系统引导进程、init进程等不是有zygote创建的。 在android中提到zygote,主要两块,一个是C/C++编写的zygote,主要用来为应用和SystemService fork进程的。一个是java编写的zygote接口,负责为应用和service调用C/C++ zygote的接口执行fork,从而创建VM进程。说明:在android中,service主要有NativeService和SystemService。SystemService主要是指系统中service,比如,InputMethodService、ActivityManagerService等。
-- Android fork process
1.在android中SystemService的启动是在Zygote进程创建好后进行的,并且由Zygote进程建立好DVM运行环境,加载ZygoteInit的main函数,最终调用Zygote的本地方法forkSystemServer,并执行linux的fork方法创建SystemServer进程。
2.应用程序的进程也是由Zygote创建的,在ActivityManagerService中的startProcessLocked中调用了Process.start()方法。并通过连接调用Zygote的native方法forkAndSpecialize,执行fork任务。
3.应用进程和服务进程位于不同的进程中,他们之间是通过IPC进行数据传递的。
-- Android内核解读-Android系统的开机启动过程- http://blog.csdn.net/singwhatiwanna/article/details/19302593
SystemServer作为zygote孵化的第一个Dalvik进程,其孵化过程在上面已经进行了描述,但是其和普通进程的启动略有不同,普通进程由Zygote.forkAndSpecialize来启动,而SystemServer由Zygote.forkSystemServer来启动,其次是SystemServer内部多创建了一个socket客户端。
-- Android源码解析之(八)-->Zygote进程启动流程- http://blog.csdn.net/qq_23547831/article/details/51104873
init进程 --> Zygote进程 --> SystemServer进程 -->各种应用进程:
1.init进程:linux的根进程,android系统是基于linux系统的,因此可以算作是整个android操作系统的第一个进程;
2.Zygote进程:android系统的根进程,主要作用:可以作用Zygote进程fork出SystemServer进程和各种应用进程;
3.SystemService进程:主要是在这个进程中启动系统的各项服务,比如ActivityManagerService,PackageManagerService,WindowManagerService服务等等;
4.各种应用进程:启动自己编写的客户端应用时,一般都是重新启动一个应用进程,有自己的虚拟机与运行环境;
android系统中进程之间通讯的方式是Binder,但是有一个例外是SystemService进程与Zygote进程之间是通过Socket的方式进行通讯的。
SystemServer进程主要的作用是启动各种系统服务,比如ActivityManagerService,PackageManagerService,WindowManagerService等服务,我们平时熟知的各种系统性的服务其实都是在SystemServer进程中启动的,而当我们的应用需要使用各种系统服务的时候其实也是通过与SystemServer进程通讯获取各种服务对象的句柄的进而执行相应的操作的。