从AMS与Zygote通信理解Android系统的启动过程

无意中看到一个有意思的问题:AMS与Zygote进程通信为什么用Socket而不是Binder?

如下图:

可以看到,在Launcher启动其他APP的过程中,AMS发送创建进程的请求和Zygote进程fork新进程,都是用的Socket方式。

那么为什么用socket而不是用Binder方式了?

网上有很多说法。这个问题的答案本身没有多大意义,Socket也好,Binder也好,功能实现,没有bug就行了。Socke可以优化,Binder也可以优化,不一定哪种方式就绝对的好。不过,分析不同的说法的理论依据,倒是可以增长见识。这些说法是否靠谱,有待研究。

说法一:Binder驱动加载是早于init进程的

如下图:

这种说法的依据是,Binder驱动属于内核层,Android系统启动时,先加载内核,然后才创建init进程。

说法二:init进程先创建ServiceManager进程,AMS,WMS,PMS等等都注册在ServiceManager进程中。

如下图:

init进程确实是先创建ServiceManager进程,然后再创建Zygote进程的,如下图:

说法三:Linux中fork进程不推荐fork一个多线程的进程

确实有这种说法,但这个不一定就是使用Socket而不使用Binder的原因。

相关推荐
笔夏9 小时前
【安卓学习之socket】socket.io-client
android·学习
用户94261184462919 小时前
Android开发实战:ListView与RecyclerView使用详解
android
梦里花开知多少9 小时前
深入解析Launcher3 中的 CellLayout
android·面试
wggmrlee9 小时前
RAG基于LangChain实现
linux·langchain
christine_rr9 小时前
linux常用命令(3)压缩命令
linux
WangJunXiang69 小时前
MySQL高可用详细解析
android·数据库·mysql
L_09079 小时前
【Linux】实现简易 shell 程序
linux·bash
爱学习的程序媛9 小时前
WSL2:Windows上运行Linux的完整指南
linux·运维·windows·ubuntu·wsl2
Yupureki9 小时前
《Linux系统编程》20.常见程序设计模式
linux·服务器·c语言·c++·单例模式·建造者模式·责任链模式
M1nat0_9 小时前
Linux基础 Ext 文件系统:从磁盘硬件到目录路径的全链路解析
linux·服务器·网络·数据库