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() } };