2019年(1)
分类: 嵌入式
2019-07-10 20:03:57
接触过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的定义如下,