Board logo

标题: Android开发之Binder浅析 [打印本页]

作者: look_w    时间: 2019-3-3 18:47     标题: Android开发之Binder浅析

Binder是为了解决跨进程通信。你说AIDL,它是基于Binder的扩展

    Binder分为Client和Server两个进程。
    注意,这里的Client和Server并不是单一规定死的,谁只能是Server或者谁只能是Clitent;
    举例:两个进程A和B之间使用Binder通信,进程A发消息给进程B,那么这时候A是Binder Client,B是Binder Server;进程B发消息给进程A,那么这时候B是Binder Client,A是Binder Server;
    看一下图分析


Binder

图中的IPC就是进程间通信的意思。

图中的ServiceManager,负责把Binder Server注册到一个容器中。
有人把ServiceManager比喻成电话局,存储着每个住宅的座机电话,还是很恰当的。张三给李四打电话,拨打电话号码,会先转接到电话局,电话局的接线员查到这个电话号码的地址,因为李四的电话号码之前在电话局注册过,所以就能拨通;没注册,就会提示该号码不存在。
对照着Android Binder机制,对着上面这图,张三就是Binder Client,李四就是Binder Server,电话局就是ServiceManager,电话局的接线员在这个过程中做了很多事情,对应着图中的Binder驱动

    再来一张更加生动的图


Binder,图中的SM也就是ServiceManager。

我们看到,Client想要直接调用Server的add方法,是不可以的,因为它们在不同的进程中,这时候就需要Binder来帮忙了。

    Server在SM这个容器中注册。
    Client想要调用Server的add方法,就需要先获取Server对象, 但是SM不会把真正的Server对象返回给Client,而是把Server的一个代理对象返回给Client,也就是Proxy。
    Client调用Proxy的add方法,SM会帮他去调用Server的add方法,并把结果返回给Client。

好了,Binder分析到此结束. 至于Binder驱动中间做了啥,有需要的可以去自行查看,反正我是看不太懂(哭.. )




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0