分类: 嵌入式
2012-02-06 22:12:10
接触过android的人都知道Binder服务调用是android系统的基础。它担负是跨进程或进程内调用和数据传递的任务。理解它是理解android众多services的基础。binder服务的层次图如下:
一个新的服务实体类BnXXXService一般用下面的方式定义:
1028行调用BBinder::tranact()。BBinder::tranact()是:
107行调用的onTransact(),其实就是BnXXXService::onTransact()。这样就可以在BnXXXService::onTransact()中通过switch语句完成各种各样的服务。有关类的关系如图:
如代码所示:先通过defaultServiceManager()得到IServiceManager的客户代理,然后这个IServiceManager对象查询"IXXXService.name"服务,ServiceManager::getService()返回对应服务的IBinder。最后,interface_cast把这个IBinder转换成服务的客户端代理类BpXXXService。interface_cast的定义如下,
linux_fan20132013-12-24 20:54:22
您好,我是个菜鸟,在阅读Android 源码的时候遇到了疑问,特向高手请教。
107行调用的onTransact(),其实就是BnXXXService::onTransact()。这样就可以在BnXXXService::onTransact()
==========> 我这边看到自己的BBinder::onTransact被实现了,那么,我想请问的是: BBinder::Transact里面的
那个onTransact请问是调用的哪个onTransact ? 为啥是BnCameraService::onTransact 呢??