第六学:binder---client与server向SM的求学之路

原文位置:http://blog.csdn.net/luoshengyang/article/details/6627260
综述:
上一学中,学到了android当中的进程通信机制中service manager的启动。binder机制是一个c/s架构的通信机制,这一学将会对于其中的c与s进行学习,其实service manager也是一个server,不过它是一个特殊的server,它的“地址”是一定的。这一学索要学到的就是client与server的寻址方法,c/s架构中client与server的求学之路。

调用流程:

1、Service Manager的获取:SM为一个单例,client与server想要获取他的接口的时候,会通过defaultServiceManager来获取SM的实例
代码文件位置:frameworks/base/include/binder/ServiceManager.h

2、Service Manager的创建:步骤1当中的defaulServiceManager是一个获取SM实例的函数,其中使用了单例模式,来将SM获取或者创建后获取,而创建的过程是通过interface_cast<IServiceManager>(ProcessState::self() -> getContextObject(Null))进行创建一个BpServiceManager的对象。
代码位置:frameworks/base/libs/binder/Static.cpp

3、ProcessState::self() -> getContextObject(Null)本质上也是一个单例创建的过程,进行创建一个索引为0的BpBinder,实际上等价于new BpBinder(0);


4、然后是interface_cast<IServiceManager>(...) 函数本身,这个函数又是一个单例,等价于new BpServiceManager(...)
代码位置:
framework/base/include/binder/IInterface.h
framework/base/libs/binder/IServiceManager.cpp

5、因此,SM的创建就相当于单例地new BpServiceManager(new BpBinder(0));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值