#BinderDemo 学习Binder通讯的一个实例
1,Client 端 2,Interface: BpTestServer, 同时实现实现BpInterface 和ITestServer接口 BnTestServer: (service端需要实现继承实现 BnTestService 接口)
流程如下:
Client端 通过调用ITestServer接口(实际由BpTestServer接口实现)的hello方法。 hello方法中通过remote()->transact(); 实际调用BpBinder->transact方法 实际由IPCThreadState::self()->transact 再到 IPCThreadState中的 waitForResponse 再到 IPCThreadState中的 executeCommand 在其case:BR_TRANSACTION 中 实际由 error = reinterpret_cast<BBinder*>(tr.cookie)->transact(tr.code, buffer, &reply, tr.flags);
status_t BBinder::transact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { data.setDataPosition(0);
status_t err = NO_ERROR;
switch (code) {
case PING_TRANSACTION:
reply->writeInt32(pingBinder());
break;
default:
err = onTransact(code, data, reply, flags); //实际调用BnTestServer的 onTransact方法。
break;
}
BnTestServer中调用 hello 方法,hello 方法实际由 TestServer实现 实际调用到了Server端的方法
总:
Client --> BpInterface --> BnXXXServer --> XXXServer