WEB开发网
开发学院手机开发Android 开发 android binder机制实现 阅读

android binder机制实现

 2010-05-31 14:30:00 来源:WEB开发网   
核心提示:}#define DECLARE_META_INTERFACE(INTERFACE) static const String16 descriptor; static sp asInterface(const sp& obj); virtual String16 getInterfaceDescriptor()

}

#define DECLARE_META_INTERFACE(INTERFACE) static const String16 descriptor; static sp asInterface(const sp& obj); virtual String16 getInterfaceDescriptor() const; #define IMPLEMENT_META_INTERFACE(INTERFACE, NAME) const String16 I##INTERFACE::descriptor(NAME); String16 I##INTERFACE::getInterfaceDescriptor() const { return I##INTERFACE::descriptor; } sp I##INTERFACE::asInterface(const sp& obj) { sp intr; if (obj != NULL) { intr = static_cast( obj->queryLocalInterface( I##INTERFACE::descriptor).get()); if (intr == NULL) { intr = new Bp##INTERFACE(obj); } } return intr; }

在定义自己的类的时候,只需要使用DECLARE_META_INTERFACE和IMPLEMENT_META_INTERFACE两个接口,并

结合类的名称,就可以实现BpInterface中的asInterface()和getInterfaceDescriptor()两个函数。

第二部分 Binder的运作

2.1 Binder的工作机制

Service Manager是一个守护进程,它负责启动各个进程之间的服务,对于相关的两个需要通讯的进程,它们通过调用libutil.so库实现通讯,而真正通讯的机制,是内核空间中的一块共享内存。

<a target=android binder机制实现【zz】 - On<wbr>ce - 许兴旺的博客" src="http://www.cnmsdn.com/attached/201005/20100530170531_24913.jpg" width="610" height="346" border="0" onload="return imgzoom(this,550);" style="cursor:pointer;" onclick="javascript:window.open(this.src);"/>

2.2 从应  用程序的角度看Binder

从应用程序的角度看Binder一共有三个方面:

Native 本地:例如BnABC,这是一个需要被继承和实现的类。

Proxy 代理:例如BpABC,这是一个在接口框架中被实现,但是在接口中没有体现的类。

客户端:例如客户端得到一个接口ABC,在调用的时候实际上被调用的是BpABC

<a target=android binder机制实现【zz】 - On<wbr>ce - 许兴旺的博客" src="http://www.cnmsdn.com/attached/201005/20100530170533_98641.jpg" width="555" height="500" border="0" onload="return imgzoom(this,550);" style="cursor:pointer;" onclick="javascript:window.open(this.src);"/>

本地功能(Bn)部分做的:

实现BnABC:: BnTransact()

注册服务:IServiceManager::AddService

代理部分(Bp)做的:

实现几个功能函数,调用BpABC::remote()->transact()

上一页  1 2 3 4 5 6 7 8 9 10 11  下一页

Tags:android binder 机制

编辑录入:coldstar [复制链接] [打 印]
赞助商链接