defaultServiceManager(); 为什么指向BpServiceManager ,后者如何关联binder仍需要整理
来源:互联网 发布:最新网络歌曲2017 编辑:程序博客网 时间:2024/06/08 19:53
接着binder机制
对于客户端来说,反正拿到接口再说,再找实现类或者代理类,然后调用即可。
客户端都是Ixxx=yyy对吧
这样调用Ixxx里面方法就可以啦
sp<IServiceManager> sm = defaultServiceManager();
跟踪源码,找到真正的指向IServiceManager
frameworks\native\libs\binder\IServiceManager.cpp
getContextObject-----getStrongProxyForHandle
Automutex作用可以看作java中单例模式里面synchronized,互斥锁。
单例模式嘛。
可以看出真正实现是ProcessState::self()->getContextObject(NULL));
最终返回的是result 也就是b,也就是new BpBinder(handle);
而ServiceManager持有的handle就是0。
接着interface_cast转为IServiceManager接口
本质调用的是asInterface,这个在安卓IInterface.cpp中实现
返回一个 new Bp##INTERFACE(IBinder obj)
这里是模板,也就是说返回一个BpServiceManager
好吧。总结一下。IServiceManager =>>BpBinder=>>BpServiceManager
那也就是说以后调用IServiceManager->addService就是BpServiceManager->addService
看看如何添加的吧
BpServiceManager本身没有继承IBinder,所以不具有通信能力,但是他remote()持有一个binder,利用这个就可以发送数据
也就是transact()发送Parcel数据。代理发数据即可----在客户端看来。是不是ATM直接按钮就可以取钱不在乎原理实现,只是给我
一个代理满足即可
- defaultServiceManager(); 为什么指向BpServiceManager ,后者如何关联binder仍需要整理
- Binder机制之Server端—defaultServiceManager()
- Android Binder机制(四) defaultServiceManager()的实现
- defaultServiceManager
- Android Binder学习(三)之defaultServiceManager()的分析
- 为什么知识需要整理需要管理!?
- 常量指针,常指针,指针常量,指向常量的指针,为什么常量指针仍可以指向变量
- Binder学习笔记(二)——defaultServiceManager()返回了什么?
- 仍需要很多努力
- 为什么需要RSS及如何使用
- Android为什么选择binder
- Android为什么选择binder
- NoSQL革命仍需要等待
- 改变指针指向的地址为什么需要二维指针,从汇编角度分析
- 为什么 C++ 仍如此重要
- 为什么 C++ 仍如此重要
- Binder学习资料整理
- Binder学习资料整理
- AndroidManifest文件详解
- MyBatis学习之二:SQL语句映射文件(1)resultMap
- 《PCL点云库学习&VS2010(X64)》Part 20 PCL1.72(VTK6.2.0)PCL控制台程序线程
- 棋盘问题
- 简单Shell脚本学习
- defaultServiceManager(); 为什么指向BpServiceManager ,后者如何关联binder仍需要整理
- css知识点1
- 最全的机器学习资料汇总
- POJ1376(A*)
- 创建博客-文章编辑
- csu1023
- Android内存泄漏产生的原因以及解决方案(OOM)
- Leetcode 101. Symmetric Tree 验证树的对称性 解题报告
- 题目:旋转数组的最小数字