11/17/2010 [转载]Android的IPC机制,Binder的各个部分_2
来源:互联网 发布:知乎小说推荐知乎言情 编辑:程序博客网 时间:2024/05/23 07:25
http://hi.baidu.com/tang157/item/9d8936ddf61efa52d63aae08
[转载]Android的IPC机制,Binder的各个部分_2
1.3 binder的库的部分
binder相关的文件作为Android的uitls库的一部分,这个库编译后的名称为libutils.so,是Android系统中的一个公共库。
主要文件的路径如下所示:
frameworks/base/include/utils/*
frameworks/base/libs/utils/*
主要的类为:
RefBase.h :
引用计数,定义类RefBase。
Parcel.h :
为在IPC中传输的数据定义容器,定义类Parcel
IBinder.h:
Binder对象的抽象接口, 定义类IBinder
Binder.h:
Binder对象的基本功能, 定义类Binder和BpRefBase
BpBinder.h:
BpBinder的功能,定义类BpBinder
IInterface.h:
为抽象经过Binder的接口定义通用类,
定义类IInterface,类模板BnInterface,类模板BpInterface
ProcessState.h
表示进程状态的类,定义类ProcessState
IPCThreadState.h
表示IPC线程的状态,定义类IPCThreadState
各个类之间的关系如下所示:
在IInterface.h中定义的BnInterface和BpInterface是两个重要的模版,这是为各种程序中使用的。
BnInterface模版的定义如下所示:
template<typename INTERFACE>
class BnInterface : public INTERFACE, public BBinder
{
public:
virtual sp<IInterface> queryLocalInterface(const String16& _descriptor);
virtual String16 getInterfaceDescriptor() const;
protected:
virtual IBinder* onAsBinder();
};
BnInterface模版的定义如下所示:
template<typename INTERFACE>
class BpInterface : public INTERFACE, public BpRefBase
{
public:
BpInterface(const sp<IBinder>& remote);
protected:
virtual IBinder* onAsBinder();
};
这两个模版在使用的时候,起到得作用实际上都是双继承:使用者定义一个接口INTERFACE,然后使用BnInterface和BpInterface两个模版结合自己的接口,构建自己的BnXXX和BpXXX两个类。
DECLARE_META_INTERFACE和IMPLEMENT_META_INTERFACE两个宏用于帮助BpXXX类的实现:
#define DECLARE_META_INTERFACE(INTERFACE) \
static const String16 descriptor; \
static sp<I##INTERFACE> asInterface(const sp<IBinder>& 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> I##INTERFACE::asInterface(const sp<IBinder>& obj) \
{ \
sp<I##INTERFACE> intr; \
if (obj != NULL) { \
intr = static_cast<I##INTERFACE*>( \
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()两个函数。
- 11/17/2010 [转载]Android的IPC机制,Binder的各个部分_2
- Android的IPC机制Binder的各个部分 (1)
- 转帖:Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分
- Android的IPC机制Binder的各个部分 : Reference 3#
- Timer实现指定整点时间触发、指定间隔触发
- Microsoft Office Word 2007 文档结构图突然变小的解决办法
- Android Service完全解析,关于服务你所需知道的一切(上)
- 纵表转横表
- mysql 按时间查询
- 11/17/2010 [转载]Android的IPC机制,Binder的各个部分_2
- 微信公众帐号开发教程第9篇-QQ表情的发送与接收
- windows 7 多国语言包官方下载资源共享(32/64位)
- 高通芯片待机问题
- 请认清ubuntu的apt-get命令(肤浅版)
- 高并发的epoll+线程池,epoll在线程池内
- shell 编程中使用到得if语句内判断参数
- 排序算法C++代码——快速排序
- Linux命令pkg-config