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

android binder机制实现

 2010-05-31 14:30:00 来源:WEB开发网   
核心提示:reply->writeInt32(0);reply->writeInt32(res ? 1 : 0);return NO_ERROR;} break;default:return BBinder:: BnTransact(code, data, reply, flags);}}status_t BnPer

reply->writeInt32(0);

reply->writeInt32(res ? 1 : 0);

return NO_ERROR;

} break;

default:

return BBinder:: BnTransact(code, data, reply, flags);

}

}

status_t BnPermissionController:: BnTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch(code) { case CHECK_PERMISSION_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); String16 permission = data.readString16(); int32_t pid = data.readInt32(); int32_t uid = data.readInt32(); bool res = checkPermission(permission, pid, uid); reply->writeInt32(0); reply->writeInt32(res ? 1 : 0); return NO_ERROR; } break; default: return BBinder:: BnTransact(code, data, reply, flags); } }

在onTransact()函数中根据枚举值判断数据使用的方式。注意,由于BnPermissionController也是继承了类

IPermissionController,但是纯虚函数checkPermission()依然没有实现。因此这个

BnPermissionController类并不能实例化,它其实也还是一个接口,需要一个实现类来继承它,那才是实现具体功能的类。

3.2 BnABC的实现

本地服务启动后将形成一个守护进程,具体的本地服务是由一个实现类继承BnABC来实现的,这个服务的名称通常叫做ABC。

在其中,通常包含了一个instantiate()函数,这个函数一般按照如下的方式实现:

void ABC::instantiate() {

defaultServiceManager()->addService(

String16("XXX.ABC"), new ABC ());

}

按照这种方式,通过调用defaultServiceManager()函数,将增加一个名为"XXX.ABC"的服务。

在这个defaultServiceManager()函数中调用了:

ProcessState::self()->getContextObject(NULL));

IPCThreadState* ipc = IPCThreadState::self();

IPCThreadState::talkWithDriver()

在ProcessState 类建立的过程中调用open_driver()打开

驱动

程序,在talkWithDriver()的执行过程中。

3.3 BpABC调用的实现

BpABC调用的过程主要通过mRemote()->transact()

上一页  5 6 7 8 9 10 11  下一页

Tags:android binder 机制

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