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

相关推荐
TheNextByte114 小时前
在小米上检索照片/视频的5种方法
android
我命由我1234514 小时前
JUnit - 自定义 Rule
android·java·开发语言·数据库·junit·java-ee·android-studio
showker14 小时前
Mac mini-macOS Tahoe 26.1-安装ftp服务-用户名密码都对,就是提示530 login incorrect
linux·服务器·数据库
未来之窗软件服务15 小时前
服务器运维(二十八)阿里云清理服务器瘦身降低漏洞风险—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
2501_9159214315 小时前
在没有源码的前提下,怎么对 Swift 做混淆,IPA 混淆
android·开发语言·ios·小程序·uni-app·iphone·swift
晨非辰17 小时前
Linux权限管理速成:umask掩码/file透视/粘滞位防护15分钟精通,掌握权限减法与安全协作模型
linux·运维·服务器·c++·人工智能·后端
夜颂春秋18 小时前
jmeter做压力测试
linux·运维·服务器·压力测试
lihui_cbdd21 小时前
AMBER 24 生产环境部署完全指南(5090可用)
linux·计算化学
生活很暖很治愈1 天前
Linux基础开发工具
linux·服务器·git·vim
似霰1 天前
Linux Shell 脚本编程——核心基础语法
linux·shell