Binder 代理对象的获取

2016-5-30 chenhui Binder

本文只讲解基本原理,不贴任何代码。阅读本文前,请先阅读 Binder 通信流程之详细分解 。


当一个 Service 注册到 SM 内后,如果一个 Client 想和他进行通信,那么就要先获得一个引用到 Service 的实体对象的引用对象,以及一个封装这个引用对象的代理对象。


引用对象位于内核空间,代理对象位于用户空间。


怎么获取呢?我们知道,Service 都保存在 SM 内,所以获取代理对象要和 SM 进行通信,如何和 SM 进行通信可阅读本文开头超链接指向的文章。

获取代理对象的命令是 CHECK_SERVICE,并且在通信数据中保存了欲获取 Server 的名字,SM 得到名字后就开始查找是否存在这个 Server,如果存在,就把 Server 的信息返回给 Client,Client 则根据 Server 的信息(比如 Server 的实体对象)创建一个引用对象,最后根据引用对象的句柄来创建代理对象。


代理对象存在的意义就是通过他内部的引用对象句柄来引用对象,有了引用对象,也就能找到对方的实体对象了,也就能在对方的线程池中找到一个空闲的线程,并把通信数据发给这个空闲线程,也就实现了进程间的数据通信。



发表评论:

Copyright ©2015-2016 freehui All rights reserved