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

Android IPC 通讯机制源码分析

 2010-05-29 05:27:00 来源:WEB开发网   
核心提示:templateinline sp interface_cast(const sp& obj){return INTERFACE::asInterface(obj);}将这个宏扩展后最终得到的是:sp IServiceManager::asInterface(const sp& obj){sp intr;if (obj

template

inline sp interface_cast(const sp& obj)

{

return INTERFACE::asInterface(obj);

}

将这个宏扩展后最终得到的是:

sp IServiceManager::asInterface(const sp& obj)

{

sp intr;

if (obj != NULL) {

intr = static_cast(

obj->queryLocalInterface(

IServiceManager::descriptor).get());

if (intr == NULL) {

intr = new BpServiceManager(obj);

}

}

return intr;

}

返回一个BpServiceManager对象,这里obj就是前面我们创建的BpBInder对象。

client获取Service的远程IBinder接口

以CameraService为例(camera.cpp):

const sp& Camera::getCameraService()

{

Mutex::Autolock _l(mLock);

if (mCameraService.get() == 0) {

sp sm = defaultServiceManager();

sp binder;

do {

binder = sm->getService(String16("media.camera"));

if (binder != 0)

break;

LOGW("CameraService not published, waiting...");

usleep(500000); // 0.5 s

} while(true);

if (mDeathNotifier == NULL) {

mDeathNotifier = new DeathNotifier();

}

binder->linkToDeath(mDeathNotifier);

mCameraService = interface_cast(binder);

}

LOGE_IF(mCameraService==0, "no CameraService!?");

return mCameraService;

}

由前面的分析可知sm是BpCameraService对象://应该为BpServiceManager对象

virtual sp getService(const String16& name) const

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

Tags:Android IPC 通讯

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