Binder机制(2)
来源:互联网 发布:手机版数据库软件 编辑:程序博客网 时间:2024/06/03 17:37
注册MediaPlayerService
下面分析MediaPlayerService,代码如下:
根据前面的分析可知,defaultServiceManager()实际返回的对象是BpServiceManager,它是IServiceManager的后代,代码如下所示:
这里addService函数中把请求数据打包为data后,传给了BpBinder的transact函数,就把通信的工作叫给了BpBinder了。
之前在BpBinder中找不到任何与Binder设备交互的地方,秘密在这个transact函数中,它的实现如下:
这里遇见了IPCThreadState,它和Binder的通信有关,对其进行深入分析:
IPCThreadState的实现代码在IPCThreadState.cpp中,如下所示:
接下来,转向分析它的构造函数IPCThreadState(),如下所示:
每个线程都有一个IPCThreadState,每个IPCThreadState中都有一个mIn,一个mOut,
其中,mIn是用来接收来自Binder设备的数据的,mOut则是用来存储发往Binder设备的数据的。
传输工作是很辛苦的,我们刚才看到BpBinder的transact调用了IPCThreadState的transact函数,这个函数实际完成了与Binder通信的工作,代码如下所示:
多熟悉的流程: 先发数据,然后等结果。
不过我们有必要确认一下handle这个参数有什么作用。先看writeTransactionData函数,实现如下:
现在已经把addService的请求信息写道了mOut中了,接下来再看看发送请求和接收回复部分的实现,代码在waitForReponse函数中。如下所示:
OK,我们已经发送了请求数据,假设马上就收到了回复,后续该怎么处理?看看executeCommand函数,如下所示:
下面看下如何和binder设备交互。talkwithDriver函数:
- Binder机制(2)
- android Binder机制2---Binder的数据结构以及Binder驱动
- Binder机制2---Binder的数据结构以及Binder驱动
- Binder机制2---Binder的数据结构以及Binder驱动
- Binder机制2---Binder的数据结构以及Binder驱动
- Android Binder 机制(2)
- Binder机制
- Binder机制
- Binder机制
- binder机制
- binder机制
- Binder机制
- Binder机制
- Binder机制
- Binder机制
- Binder机制
- Binder机制
- Binder机制
- android 中view 的OnTouchListener和OnClickListener的区别
- OERR: ORA-4031 "unable to allocate %s bytes of shared memory ("%s","%s","%s")" (文档 ID 4031.1)
- 第38章 用访问控制列表实现包过滤
- chrome插件开发-----右键使用百度搜索
- 不是技术牛人,如何拿到国内IT巨头的Offer
- Binder机制(2)
- Cocos2d-x 中使用多线程
- C# download 静态网页
- 我的2014-杂七杂八经历
- openfire用户以及群组关系移植(与数据库中的关联)
- JS - 特殊变量
- Linux端口状态查看、启用和关闭
- 设计模式——单件模式
- java环境变量设置