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

Android Binder 基础

2018年04月11日 ⁄ 综合 ⁄ 共 1302字 ⁄ 字号 评论关闭

源码请看:

1)内核驱动部分:drivers/staging/android/

2)用户空间部分:frameworks/base/libs/binder/; frameworks/base/include/binder/;frameworks/base/cmds/servicemanager/

Binder起源于BeOS
操作系统,像COM一样提供
RPC/IPC 机制,OpenBinder是它的开源实现。Android's Binder
OpenBinder的启发,是Binder的子集的一个重新实现。

Binder
在传统的
OS上提供面向对象的远程调用和消息传递机制,遵循客服端/服务器编程模式。远程服务以面向对象的方式封装,可以任何语言实现,每个服务可以有自己独立的进程,也可以共享进程。客户端只需获取远程服务的句柄,然后可以向本地对象一样调用。

    Binderandroid的架构中有着核心的地位。Android
通过Binder提供系统服务: 源管理服务,多媒体服务,窗口系统管理,存储服务等等。

 Binder的实现主要分为两部分:内核层Binder 驱动,主要实现不同进程之间通信;用户层:主要提供内核层api封装,以及向上提供面向对象的IBinder的实现,提供ServiceManager的实现,方便服务的注册和统一管理,提供用户层的缓存,规范了服务的实现模式,以及客服端调用服务的模式。

Binder目前支持的通信命令有:BINGER_WRITE_READ, BINDER_SET_MAX_THREADS, BIND_SET_CONTEXT_MGR, BINDER_THREAD_EXIT, BINDER_VERSION.

  
针对BINDER_WRITE_READ,次级的命令有:

读取时返回的命令:

         BR_ERROR, BR_OK, BR_TRANSACTION, BR_REPLY, BR_ACQUIRE_RESULT, BR_TRANSACTION_COMPLETE, 
           BR_INCREFS, BR_ACQUIRE,   BR_RELEASE,   BR_DECREFS,   BR_ATTEMPT_ACQUIRE,  BR_NOOP,                BR_SPAWN_LOOPER
BR_FINISHED
BR_CLEAR_DEATH_NOTIFICATION_DONE, BR_FAILED_REPLY

        写时支持的命令:

    BC_TRANSACTION
BC_REPLYBC_ACQUIRE_RESULT, BC_INCREFS,BC_ACQUIRE, BC_RELEASE,                   BC_DECREFS, BC_INCREFS_DONE, BC_ACQUIRE_DONE, BC_ATTEMPT_ACQUIRE, BC_ENTER_LOOPER,
                BC_EXIT_LOOPER, BC_REQUEST_DEATH_NOTIFICATION, 
BC_CLEAR_DEATH_NOTIFICATION,

   
BC_DEAD_BINDER_DONE,

  

命令交互图的例子:

用户空间类图:

抱歉!评论已关闭.