Binder通讯机制

大纲

  1. Binder通信机制介绍

    1. Android与Linux通信机制的比较
    2. BinderService服务中的作用

    3. Binder通信机制流程

  2. 数据结构分析

  3. 驱动分析

  4. Binder的流程分析

    1. Service Manager成为守护进程

    2. ServerClient获得ServiceManager的远程接口

    3. ServerSM注册服务

    4. ClientSM获得服务

  5. 基于framework层的实现

    1. 初始化frameworkBinder框架

    2. C/S获得ServiceManagerJava远程接口过程

    3. XXXService的接口定义和启动过程,添加自己到SM

    4. Client获得XXXServiceJava远程接口过程

    5. Client通过Java远端接口使用XXXService提供的服务

  6. 实际应用

    1. PMService例子

    2. 碰到的问题及解决办法

1. Binder通信机制介绍

1.1 Android与Linux通信机制的比较

虽然Android继承使用Linux的内核,但Linux与Android的通信机制不同。

在Linux中使用的IPC通信机制如下:

  1. 传统IPC:无名pipe, signal, trace, 有名管道
  2. AT&T Unix 系统V:共享内存,信号灯,消息队列
  3. BSD Unix:Socket

而在Android中,并没有使用这些,取而代之的是Binder机制。Binder机制是采用OpenBinder演化而来,在Android中使用它的原因如下:

  1. 采用C/S的通信模式。而在linux通信机制中,目前只有socket支持C/S的通信模式,但socket有其劣势,具体参看第二条。
  2. 有更好的传输性能。对比于Linux的通信机制,socket:是一个通用接口,导致其传输效率低,开销大;管道和消息队列:因为采用存储转发方式,所以至少需要拷贝2次数据,效率低;共享内存:虽然在传输时没有拷贝数据,但其控制机制复杂(比如跨进程通信时,需获取对方进程的pid,得多种机制协同操作)。
  3. 安全性更高。Linux的IPC机制在本身的实现中,并没有安全措施,得依赖上层协议来进行安全控制。而Binder机制的UID/PID是由Binder机制本身在内核空间添加身份标识,安全性高;并且Binder可以建立私有通道,这是linux的通信机制所无法实现的(Linux访问的接入点是开放的)。

综上所述,Android采用Binder机制是有道理的。既然Binder机制这么多优点,那么我们接下来看看它的实现思路是怎样的。

1.2 BinderService服务中的作用

在android中,有很多Service都是通过binder来通信的,比如MediaServer旗下包含了众多service:

  •     AudioFlinger 音频核心服务
  •     AudioPolicyService:音频策略相关的重要服务
  •     MediaPlayerService:多媒体系统中的重要服务
  •     CameraService:有关摄像/照相的重要服务











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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值