WEB开发网
开发学院手机开发Android 开发 Android IPC 通讯机制源码分析 阅读

Android IPC 通讯机制源码分析

 2010-05-29 05:27:00 来源:WEB开发网   
核心提示:default:err = onTransact(code, data, reply, flags);break;}...................return err;}将调用CameraService的onTransact函数,CameraService继承了BBinder,Android IPC 通讯机制源

default:

err = onTransact(code, data, reply, flags);

break;

}

...................

return err;

}

将调用CameraService的onTransact函数,CameraService继承了BBinder。

status_t BnCameraService::onTransact(

uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)

{

switch(code) {

case CONNECT: {

CHECK_INTERFACE(ICameraService, data, reply);

sp cameraClient = interface_cast(data.readStrongBinder());

sp camera = connect(cameraClient); //真正的处理函数

reply->writeStrongBinder(camera->asBinder());

return NO_ERROR;

} break;

default:

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

}

}

至此完成了一次从client到service的通信。

设计一个多客户端的Service

Service可以连接不同的Client,这里说的多客户端是指在Service中为不同的client创建不同的IClient接口,如果看过 AIDL编程的话,应该清楚,Service需要开放一个IService接口给客户端,我们通过 defaultServiceManager->getService就可以得到相应的service一个BpBinder接口,通过这个接口调用 transact函数就可以与service通信了,这样也就完成了一个简单的service与client程序了,但这里有个缺点就是,这个 IService是对所有的client开放的,如果我们要对不同的client做区分的话,在建立连接的时候所有的client需要给Service一个特性,这样做也未尝不可,但会很麻烦。比如对Camera来说可能不止一个摄像头,摄像头的功能也不一样,这样做就比较麻烦了。其实我们完全可以参照 QT中多客户端的设计方式,在Service中为每一个Client都创建一个IClient接口,IService接口只用于Serivce与 Client建立连接用。对于Camera,如果存在多摄像头我们就可以在Service中为不同的Client打开不同的设备。

import android.os.IBinder;

import android.os.RemoteException;

public class TestServerServer extends

上一页  11 12 13 14 15 16 17 18  下一页

Tags:Android IPC 通讯

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