framework 之Bindle深入
来源:互联网 发布:淘宝的推荐系统分析 编辑:程序博客网 时间:2024/05/16 06:25
以mediaServer为例来分析Bindle流程:
android4.2 以下文件的代码在framework/Native和framework/av和framework/base中:
ProcessState,每个进程只有一个processstate对象,该对象的self函数采用单例模式。构造函数中open_driver打开了/dev/binder设备,
他是android在内核中完成进程间通信专门设置的一个虚拟设备,该驱动设备会分配一块内存来接收数据,一个进程只能打开一次Bindle设备。
defaultServiceManager会返回一个IServiceManager对象,通过这个对象与ServiceManager进行交互,利用BpBinder(客户端与Server的交互),BBinder
代表与BpBinder对应的Server端。用模板函数interface_cast中IBinder类型new出一个BpServiceManager。
MediaPlayerServer中的main函数,初始化的时候调用BpServiceManager的addService,利用BpBinder的transact函数移交数据通信工作,调用IPCThreadState
的transact函数,然后发送数据,等结果。
发数据:writeTransactionData(BC_TRANSACTION,flag,handle,code,data,null)第一个参数BC_TRANSACTION是应用程序向binder设备发送消息的消息码,
而binder设备向应用程序回消息已BR_开头。在IPCThreadState的构造中保证一个线程有一个该对象,并且每个对象中有一个mIn和mOut,mIn用来接收binder的数据,
mOut用来存储发往binder的数据,wirte的时候即发送成功,与文件的流读写模式是一样的。
startThreadPool和joinThreadPool
创建线程池,加入线程池,startThreadPool最终会调用joinThreadPool,所有都在joinThreadPool中处理。startThreadPool中新启动的线程talkWithDriver读取binder设备,主线程也talkWithDriver读取binder设备。
服务总管:serviceManager
main函数中先打开binder设备,再将该设备的handle设置为0,成为manager,最后处理客户端发来的消息binder_loop函数,该函数主要注册服务。因此ServiceManager集中管理系统内的所有服务。
以mediaPlayerService为例:
一个Client要想获取某个Service的信息,通过ServiceManager的getServer函数,返回一个Binder,再将Binder转化为BpMediaPlayerService,addService之后,等待结果。如果此时收到一个请求消息,即talkWithDriver中有消息,则通过BnMediaPlayerService的onTransact函数实现,此时BpMediaPlayerService为加入服务后监听使用,而
BnMediaPlayerService继承BBinder,为接收到数据时使用。
- framework 之Bindle深入
- framework之深入surface系统
- Entity Framework之深入分析
- Entity Framework之深入分析
- 深入Spring MVC framework之总体分析
- 深入Spring MVC framework之总体分析
- 深入Spring MVC framework之总体分析
- android 4.3 framework之init深入
- android4.3 framework之zygote深入
- framework之深入理解常见类
- framework之深入理解Vold和Rild
- Spring MVC framework深入分析之二--ApplicationContext之谜
- Spring MVC framework深入分析之三(上)--执行过程
- Spring MVC framework深入分析之三(下)--执行过程
- Spring MVC framework深入分析二--ApplicationContext之谜
- Spring MVC framework深入分析二--ApplicationContext之谜
- Spring MVC framework深入分析之三(上)--执行过程
- Spring MVC framework深入分析之三(下)--执行过程
- UVa 11636 - Hello World!
- Web.xml常用元素详解
- PAT 1012. The Best Rank (25)
- HashMap内部实现机制及优化----第一篇
- 博客迁移到 www.lunar2013.com
- framework 之Bindle深入
- 小米或推出游戏机的5个原因
- cocos2d-x类型转换(CCstring int string char UTF-8互转)
- ASP.NET MVC 5 - (2)控制器
- 【PAT】1001. A+B Format
- 题目1448:Legal or Not
- 实现了界面可以像QQ一样像上伸缩
- JSP怎么解决中文乱码问题
- SQLiteLog (1) no such Column: