Android fork 进程 process(init/Zygote/SystemServer)

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 的整体架构会有了解。

  1. init->Zygote->SystemServer->启动App Activity;

  2. 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进程通讯获取各种服务对象的句柄的进而执行相应的操作的。

相关推荐
代码s贝多芬的音符5 小时前
ios android 小程序 蓝牙 CRC16_MODBUS
android·ios·小程序
2501_915918417 小时前
iOS 混淆实战 多工具组合完成 IPA 混淆、加固与工程化落地(iOS混淆|IPA加固|无源码混淆|Ipa Guard|Swift Shield)
android·ios·小程序·https·uni-app·iphone·webview
雨白7 小时前
让协程更健壮:全面的异常处理策略
android·kotlin
Jeled8 小时前
AI: 生成Android自我学习路线规划与实战
android·学习·面试·kotlin
游戏开发爱好者89 小时前
如何系统化掌握 iOS 26 App 耗电管理,多工具协作
android·macos·ios·小程序·uni-app·cocoa·iphone
shaominjin1239 小时前
android在sd卡中可以mkdir, 但是不可以createNewFile
android·开发语言·python
AI科技星10 小时前
垂直原理:宇宙的沉默法则与万物运动的终极源头
android·服务器·数据结构·数据库·人工智能
用户416596736935511 小时前
Kotlin Coroutine Flow 深度解析:剖析 `flowOn` 与上下文切换的奥秘
android
2501_9159214311 小时前
运营日志驱动,在 iOS 26 上掌握 App 日志管理实践
android·macos·ios·小程序·uni-app·cocoa·iphone
沐怡旸11 小时前
【Android】详细讲解ViewDragHelper的实现原理(不含代码版)
android