从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的原因。

相关推荐
渡我白衣6 分钟前
打印宏与socket模块设计
java·linux·开发语言·c++·ide·人工智能·eclipse
AI创界者14 分钟前
打造内网安全防线:使用 Kali Linux 进行企业级漏洞风险自查与防御指南
linux·运维·安全
weixin_4398575425 分钟前
在Ubuntu 26.04版本上借助本地AI助手在AMD显卡基础上安装并运行Qwen3.6-35B-A3B,作为本地编程AI
linux·人工智能·ubuntu
鱼儿也有烦恼25 分钟前
07.RecyclerView、SwipeRefreshLayout、SmartRefreshLayout
android
三少爷的鞋29 分钟前
Kotlin Flow 深入解析:`stateIn()` 的真正核心,其实是 SharingStarted
android
sanzk9 小时前
firefly开发板ubuntu安装ros2下的micro-ROS Agent
linux·运维·ubuntu
weixin_3077791312 小时前
Linux下Nginx故障系统化检查Shell脚本
linux·运维·服务器·nginx·自动化
心中有国也有家12 小时前
AtomGit Flutter 鸿蒙客户端:ModalBottomSheet 实战
android·javascript·学习·flutter·华为·harmonyos
skyutuzz13 小时前
node安装部署
linux
一次旅行13 小时前
【AI工具】Rust-Based CLI:用 xargs 和并行加速你的 Linux 日常
linux·开发语言·rust