android IBinder通信驱动(摘自《android深入浅出多媒体编程》)
来源:互联网 发布:微信点赞截图制作软件 编辑:程序博客网 时间:2024/05/17 03:36
在多进程环境下,应用程序和后台服务间通常会运行在不同的进程中,有着独立的地址空间,但是因为需要相互协作的原因,彼此间又必须进行通信和数据共享,而传统的进程间通信(IPC,Internet Process Connection)却有着进程过载和安全漏洞等方面的风险,而Binder的好处则在于在驱动层面即对进程间通信提供了支持、采用的共享内存机制提供了进程间通信的性能、采用了前置进程的线程池来处理进程请求、针对系统中的对象引入了引用计数机制和跨进程的对象引用映射机制、在进程间的同步调用。
为了进程进程间通信,Binder采用了AIDL(Android Interface Definition Lanaguage)来描述进程间的接口。
在实际的实现中,Binder是作为一个特殊的字符型设备来存在的,其实现遵循Linux设备驱动模型,相关的主要代码位于aurora/msm/msm/drivers/staging/android/ binder.c文件中。
在Binder驱动中,binder_thread_write()函数通过binder_transaction()函数来发送请求或返回结果,而binder_thread_read用于读取结果,主要通过binder_ioctl()与用户空间的进程交换数据。
Binder的私有数据结构binder_proc则被用来记录当前进程、进程ID、内存映射信息、Binder的统计信息和线程信息等。
如果收到请求,binder_transaction()函数会通过对象的handle找到对象所在的进程,如果handle为空就认为对象是 context_mgr,把请求发给context_mgr所在的进程。然后请求中所有的Binder对象全部放到一个RB树中。最后把请求放到目标进程的队列中,等待目标进程读取。数据的解析工作放在binder_parse()中实现。
一种IPC通信方式。
原文地址:http://miaozl.spaces.live.com/blog/cns!F408F266382E09FE!933.entry
- android IBinder通信驱动(摘自《android深入浅出多媒体编程》)
- android进程间通信,IBinder模型
- 《深入浅出Android多媒体编程》即将出版,非常期待~~~~~~~
- Android多媒体编程(待续)
- Android Framework框架之IBinder进程间通信
- android的IBINDER机制
- Android:Parcelable/Bundle/IBinder
- Android开发:什么是IBinder
- android IBinder 解析
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- android Ibinder 体系
- Android开发:什么是IBinder
- Android源码 · IBinder
- android IBinder 解析
- 考研 --重中之重的几句话:
- 重读页面的回收处理笔记1
- C# 调用C++dll中的结构体的定义
- CSS Box Model
- WM注册表大全
- android IBinder通信驱动(摘自《android深入浅出多媒体编程》)
- 特性的应用
- Protocol Stack
- 什么情况下会用到虚方法(虚函数)?它与接口有什么不同?
- ISO 9126质量模型
- 解读AzureAppFabric架构:云发挥到极致
- sql 游标使用简记
- 时间序列预测法
- delphi 制作ocx