Audio笔记之ServiceManager

本文探讨了在Android系统中,如何通过ServiceManager获取Server的BpServer,特别是在使用MediaPlayerService时的过程。内容揭示了ServiceManager的特殊性,即其远程接口是一个Binder引用,句柄固定为0,因此客户端可以直接获取,而无需进行常规的进程间通信。
摘要由CSDN通过智能技术生成

    在使用各种Server的时候经常会需要调用ServiceManager对象来获取该Server对应的BpServer,这个过程需要使用Binder机制来进行通信。下面是获得MediaPlayerService时的调用过程,其中获取ServiceManager的接口是defaultServiceManager,那么在这里是否也使用了Binder机制呢?对于ServiceManager这个Server来说,Client如果想要获得Service Manager远程接口,却不必通过进程间通信机制来获得,因为Service Manager远程接口是一个特殊的Binder引用,它的引用句柄一定是0。

IMediaDeathNotifier::getMediaPlayerService()
{
    ALOGV("getMediaPlayerService");
    Mutex::Autolock _l(sServiceLock);
    if (sMediaPlayerService == 0) {
        sp<IServiceManager> sm = defaultServiceManager();
        sp<IBinder> binder;
        do {
            binder = sm->getService(String16("media.player"));
            if (binder != 0) {
                break;
            }
            ALOGW("Media player service not published, waiting...");
            usleep(500000); // 0.5 s
        } while (true);

        if (sDe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值