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

相关推荐
淼淼爱喝水12 小时前
openEuler 下 Ansible 模块缺失 / 损坏后重装完整教程
linux·openeuler·技术实操
山城码农笑松哥12 小时前
Rocky Linux Centos 9.6 完全离线安装rabbitmq4.2
linux·rabbitmq
00后程序员张17 小时前
从审核被拒到稳定过审,iOS 上架技术优化
android·ios·小程序·https·uni-app·iphone·webview
江畔何人初17 小时前
iptables 和 IPVS 代理模式 Service 的区别
linux·运维·服务器·网络·云原生·kubernetes·代理模式
不会写DN20 小时前
PHP 中的文件读写与上传
android·开发语言·php
123过去20 小时前
nfc-list使用教程
linux·网络·测试工具·安全
evo-master1 天前
网络故障排除方法
linux·服务器·网络
冬奇Lab1 天前
Android 15音频子系统(七):音量控制系统深度解析
android·音视频开发
xlq223221 天前
35.信号
linux
白鸽梦游指南1 天前
docker镜像优化
linux·运维·docker