现在的位置: 首页 > 综合 > 正文

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

2018年06月10日 ⁄ 综合 ⁄ 共 826字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.