实例分析android中的Binder通信机制(2)

本文深入剖析Android中Binder通信机制,重点讲解ServiceManager如何管理服务,Binder驱动如何实现进程间通信,以及MediaPlayerService在ServiceManager中的注册过程。通过跟踪代码,揭示BpBinder和BBinder在业务层和通信层的角色,解释数据包的封装和传输,以及startThreadPool和joinThreadPool在处理Binder请求中的作用。
摘要由CSDN通过智能技术生成

    一、首先分析一下ServiceManager内容:ServiceManager提供的业务函数主要是4种:

    getServie();

    checkService() ;

    addService();

    listServices().

    已经知道,ServiceManager和Server在不同的两个进程中,所以两者之间的通信便会使用binder进行。ServiceManager和Server的关系是ServiceManager是服务端,

Server是客户端,两者之间的业务是Server端首先会向ServiceManager中注册具体的Services,这时沟通要靠binder了。

   在这里应该注意的是binder在驱动上对应着一个binder驱动设备,这个binder驱动会在内存上划分出一块共享内存块,实现数据的交互。

   现在说说MediaPlayerService这项具体的服务是如何完成在ServiceManager中的注册,binder是如何工作的。在这里还是要注意的是理解binder在业务层上的运用。

    在MediaPlayerService.cpp中首先MediaPlayerService要得到这个BpServiceManager对象,使用它才能调用addservice()完成注册。在MediaPlayerService的init函数中

实现:void MediaPlayerService::instantiate(){

          defaultServiceManager()->addService(String16("media.player"), new MediaPlayerService());

        //这个函数体描述:status_t err = remote()->transact(ADD_SERVICE_TRANSACTION, data, &reply);这个remote()的返回值是BpBinder,这里就是用BpBinder代理工作

        这里,已经进入到通信层中的Binder了,这时候就是BpBinder和BBinder的正式工作了。

         }

       其实业务层用这条语句已经完成了注册任务,表面的工作已经完成,但是要理解的是真正的Binder的BpBinder和BBinder是如何工作的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值