Binder机制之Server端—MediaPlayerService::instantiate()

来源:互联网 发布:树莓派gpio编程 编辑:程序博客网 时间:2024/05/16 04:42

MediaPlayerService::instantiate函数把MediaPlayerService添加到Service Manger中去了。这个函数定义在frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp文件中:

void MediaPlayerService::instantiate() {          defaultServiceManager()->addService( string16("media.player"), new MediaPlayerService());   }  
defaultServiceManager返回的实际是一个BpServiceManger类实例,因此,我们看一下BpServiceManger::addService的实现,这个函数实现在frameworks/base/libs/binder/IServiceManager.cpp文件中:
    class BpServiceManager : public BpInterface<IServiceManager>      {      public:             virtual status_t addService(const String16& name, const sp<IBinder>& service)          {              Parcel data, reply; //序列化进程间通信数据用的             data.writeInterfaceToken(IServiceManager::getInterfaceDescriptor());              data.writeString16(name);              data.writeStrongBinder(service);              status_t err = remote()->transact(ADD_SERVICE_TRANSACTION, data, &reply);              return err == NO_ERROR ? reply.readExceptionCode()           }      };  


原创粉丝点击