1.bbinder binder實(shí)體對(duì)象
2.bpbinder binder引用對(duì)象
3.binder代理對(duì)象
4.ibinder bbinder 和bpbinder都繼承與ibinder
注意:應(yīng)用需要使用的是binder的代理對(duì)象,使用前需要將引用對(duì)象轉(zhuǎn)換成代理對(duì)象。
ICameraService.Stub.asInterface(binder);
defaultServiceManager 拿到的是serviceManager 其實(shí)也是一個(gè)binder服務(wù)
getService()是拿到的普通binder服務(wù)
例子
class BpExampleService : public BpInterface<IExampleService>
{
virtual int get()
{
Parcel data,reply;
data.writeInterfaceToken(IexampleService::getInterfaceDescriptor());
remote()->transact(EXAMPLE_GET,data,&reply); //remote()函數(shù)得到Binder引用對(duì)象的指針,然后調(diào)用它的transcat() 此函數(shù)會(huì)調(diào)用IPCThread類的函數(shù)來向驅(qū)動(dòng)傳遞數(shù)據(jù)
最后到了onTransact方法調(diào)用遠(yuǎn)程實(shí)體對(duì)象ExampleService 類對(duì)應(yīng)的方法
return reply.readInt();
}
}
status_t BnExampleService::onTransact(...)
{
switch(code)
{
case EXAMPLE_GET:
CHECK_INTERFACE(IExampleService,data,reply);
reply->writeInt(get()); //調(diào)用get方法
break;
case EXAMPLE_SET:
CHECK_INTERFACE(IExampleService,data,reply);
set(data->readInt()); //調(diào)用set方法
break;
default:
return BBinder::onTransact(code,data,reply,flags);
}
}
圖片參考此處http://www.cnblogs.com/winfu/p/6061296.html
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注