一: 简介
在整个Android系统里面,所有的应用程序都是由Android 系统里面的Activity
,Service
,Broadcast
,ContentProvider
这四大组件中的一个或者多着拼接而成的,
这四大组件所涉及到的的进程间的通信底层都是依赖于Binder IPC通信机制。比如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于此,
整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案,比如activity启动另一个activity,activity发送广播等,当然也存在部分其他的IPC方式,比如
Zygote通信便是采用socket,当在桌面点击一个app图标启动对应的应用时候(之前从来都没打开过),此时AMS检测到没有对应的应用进程的时候,就会发起一个socket请求给
SystemServer进程,此时SystemServer会与Zygote进程采用socket通信来创建对应的应用程序进程,默认的情况下会把这个应用的包名作为这个进程的进程名字,其中pid由
操作系统来进行生成。他们之间的关系可以用下面图1来表示,要深入了解Binder机制,我们将通过阅读源码和画图的两种方式梳理清楚整个过程.
图1
(1)问题1:为什么SystemService进程和Zygote进程之间的通信采用的是socket,而不是大名鼎鼎的binder呢?下面我们继续深入的研究这个问题
我们高中的时候生物课上面学习过一种方法论,假设演绎法,就是对未知问题的不清楚或者也不知道如何入手研究的时候,我们先假定一种或者几种
结论,然后在从结论去推导,最终得出正确的答案.
假设1:是不是SystemService进程和Zygote进程之间的通信采用的是socket这种机制性能比Binder更佳?
我们在前面的浅谈binder-系列1文章中对比了进程间通信的几种方式,发现socket在传输性能上和安全性上并没有比binder优越多少,可以翻看之前的文章
<