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

android binder机制实现

 2010-05-31 14:30:00 来源:WEB开发网   
核心提示:templateclass BpInterface : public INTERFACE, public BpRefBase{public:BpInterface(const sp& remote);protected:virtual IBinder* onAsBinder();};template class BnI

template

class BpInterface : public INTERFACE, public BpRefBase

{

public:

BpInterface(const sp& remote);

protected:

virtual IBinder* onAsBinder();

};

template class BnInterface : public INTERFACE, public BBinder { public: virtual sp queryLocalInterface(const String16& _descriptor); virtual String16 getInterfaceDescriptor() const; protected: virtual IBinder* onAsBinder(); }; BnInterface模版的定义如下所示: template class BpInterface : public INTERFACE, public BpRefBase { public: BpInterface(const sp& remote); protected: virtual IBinder* onAsBinder(); };

这两个模版在使用的时候,起到得作用实际上都是双继承:使用者定义一个接口INTERFACE,然后使用BnInterface和BpInterface两个模版结合自己的接口,构建自己的BnXXX和BpXXX两个类。

DECLARE_META_INTERFACE和IMPLEMENT_META_INTERFACE两个宏用于帮助BpXXX类的实现:

Java代码 < width="14" height="15" src="http://mintelong.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflashplayer">

#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;

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

Tags:android binder 机制

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