你的位置:首页 > 操作系统

[操作系统]「Android」 基于Binder通信的C/S架构体系认知

「Android」 基于Binder通信的C/S架构体系认知 - sunweng..._博客园

「Android」 基于Binder通信的C/S架构体系认知 C/S架构(Client/Server,即客户机/器模式)分为客户机和器两层:第一层是在客户机系统上结合了表...

Android系统是一个基于BInder通信的C/S架构 - 张海玉 - 博客园

Android系统基本上可以看作是一个基于Binder通信的C/S架构。他有器端和客户端。比如自己开发一个程序,肯定是基于Activity的而Activity就是作为客...

Android Binder机制浅析之注册MediaPlayerService(1) -..._CSDN博客

在基于Binder通信的C/S架构体系中,除了C/S架构所包括的Client端和Server端外,Android还有一个全局的ServiceManager端,它的作用是管理系统中的各种...

android 媒体框架学习--mediaplayerservice 关系类图 - CSDN博客

在基于Binder通信的C/S架构体系中,除了C/S架构所包括的Client端和Server端外,Android还有一个全局的ServiceManager端,它的作用是管理系统中的各种...

干货| 彻底理解ANDROID BINDER通信架构(上) - 小米开放平台 - ...

Android内核是基于Linux系统, 而Linux现存多种进程间IPC方式:管道, 消息队列, 共享...Binder通信采用C/S架构,从组件视角来说,包含Client、Server、ServiceManager以及b...

轻松理解 Android Binder,只需要读这一篇 - 简书

答案是 IPC(Inter-Process munication),进程间通讯...Android 中「应用程序框架层」以 SDK 的形式开放给...Binder IPC 属于 C/S 结构,Client 部分...

从java到C解析Binder机制 - Android移动开发技术文章_..._红黑联盟

Binder机制是一种C/S结构,主要包括三部分,分别为Client、Server、ServiceManager。ServiceManager是谷歌设计的,...

Android开发之漫漫长途 Ⅷ——Android Binder(也许是最容易理解的)

对于初学Android的朋友而言,最难却又最想掌握的恐怕就是Binder机制了,因为Android系统基本上可以看作是一个基于Binder通信的C/S架构。 Binder就像网络...

【Android进阶】浅析Android Binder机制 - CSDN博客

的主要工作就是淡化了进程边界,淡化了进程间通信的...Binder的C/S架构 上面一节我们对远程进程调用代码执行...「参考文章」 Android面试一天一题(Day...

「Android」 基于Binder通信的C/..._相关论文(共6篇)_百度学术

...Assembled C/S Cathode with Trace Binder for Li-...nbsp;Wearable super-high specific performance ...Pressure-Induced Geopolymerization in Alkali-...查看更多相关论文gt;gt;

安卓中的Binder架构是什么?为什么要提供Binder?Service与Binder又...

Binder,Android进程通信方式,C/S架构,端,Binder通信,客户端1.端Binder...女生怎么看待问题「现在的男生为什么不追女生?」? 8.4K 关注 · 1.4K...

Android系统开篇 - Gityuan博客 | 袁辉辉博客

Android系统非常庞大、错综复杂,其底层是采用Linux作为...Binder通信采用c/s架构,从组件视角来说,包含Client、...博客定位: 基于Android 6.0的源码,专注于分享Android...

图解Binder——类图和时序图 - CSDN博客

Binder是用在Android系统中的一个进程间通信(IPC)机制,使用C/S架构,端和客户端通过Binder进行跨进程的数据交换,Binder继承自IBinder接口,因此IBin...

Binder系列—开篇 - CSDN博客

Android系统中,每个应用程序是由Android的Activity,Service,Broadcast,ContentProvider...既然基于Binder机制通信,那么同样也是C/S架构,则图中的3大步骤都有相应的Client...

android 进程间通信---bind的前世 - Joyfulmath - 博客园

七. Android中的 Binder通信实现要点: 1. Android中的Binder通信是基于Service与...aidl工具则是方便java实现c/s结构的一个工具,开发者编写简单的接口...

简单理解Binder机制的原理 - 简书

Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。例如当进程A...既然基于Binder机制通信,那么同样也是C/S架构,则图中的3大步骤都有...

为什么 Android 要采用 Binder 作为 IPC 机制? - 知乎

Binder是基于C/S架构的,简单解释下C/S架构,是指客户端(Client)和端(...综合上述5点,可知Binder是Android系统上层进程间通信的不二选择。 ...

Android—Camera Framework C/S架构请求-布布扣-bubuko.

在前一篇文章Camera Client/Server的binder IPC机制中阐述了Android进程间通信binder IPC机制基础,Android Camera基于这个基础设计了Camera Framework...

Android Multimedia框架总结(七)C++中MediaPlayer的C/S架..._阿里云

但是对于这块C/S部分,没有放大去分析。《Android Multimedia框架总结(四)Media...MediaPlayerService通过BinderDriver和MediaPlayer通信过程下面我们...

2019校招Android面试题解_搜狐科技_搜狐网

Q:Android中还了解哪些方便线程切换的类?技术点:线程通信参考回答:对...Binder基于C/S架构 ,Server端与Client端相对独立,稳定性较好。3. 安全性...西安有哪些特色小吃?荷兰艺术家霍夫曼新作大河马畅游泰晤士河揭秘世界上8大奇异湖的成因罗湖区第二届“中秋社区邻里节”活动详情深圳站、深圳东站中秋小长假将增六对临客国泰港龙航空可使用飞行模式电子产品北京出发去迪拜旅游 北京出发去迪拜旅游 北京出发去迪拜旅游 北京出发去迪拜旅游 北京出发去迪拜旅游 北京出发去迪拜旅游 北京出发去迪沙鲁沙滩旅游 北京出发去迪沙鲁沙滩旅游 北京出发去迪沙鲁沙滩旅游 北京出发去迪沙鲁沙滩旅游 北京出发去迪沙鲁沙滩旅游 北京出发去迪沙鲁沙滩旅游 北京出发去地中海邮轮旅游 北京出发去地中海邮轮旅游 北京出发去地中海邮轮旅游 北京出发去地中海邮轮旅游 北京出发去地中海邮轮旅游 北京出发去地中海邮轮旅游 北京出发去刁曼岛旅游 北京出发去刁曼岛旅游 北京出发去刁曼岛旅游 北京出发去刁曼岛旅游 北京出发去刁曼岛旅游 北京出发去刁曼岛旅游

  C/S架构(Client/Server,即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示与业务逻辑,第二层是通过网络结合了数据库服务器。简单的说就是第一层是用户表示层,第二层是数据库层。客户端和服务器直接相连,这两个组成部分都承担着重要的角色。

 

  Android内核是基于Linux系统, 而Linux现存多种进程间IPC方式:管道, 消息队列, 共享内存, 套接字, 信号量, 信号。而Android用的是Binder来进行进程间通信。

  Binder是Android系统提供的一种IPC(进程间通信)机制。对于Android系统,我们基本上可以把它看做一个基于Binder通信的C/S架构,Binder就像网络一样,把系统的各个部分连接在了一起,因此它是非常重要的。在Android系统的C/S架构中除了Client端和Server端外,还有一个全局的ServiceManager端,其作用是管理系统中的各种服务,三者的关系如下图:

  

  

1、Binder的通信结构分为三层,如下图所示:

 

2、Server

Server的工作示意图如下:

下面是对上图的每个步骤的解释(在SurfaceFlinger的入口main函数的时候分析过):

1、初始化processState:在初始化的过程中我们打开了binder虚拟设备,并使用mmap为其分配了内存,由于processState是一个用了单例模式实现的类,因此每个进程只会打开设备一次;
2、getDefaultServiceManager:顾名思义,获取ServiceManager。由于Server此时是作为客户端,因此得到了BpServiceManager,BpServiceManager中含有BpBinder,其传入的handle为0,代表ServiceManager的BBinder;
3、instantiate:使用BpServiceManager的addService方法注册服务,以字符串标识自己的服务;
4、startThreadPool:这是一个可选的操作,当系统认为服务可能较为繁忙时才会创建多个线程,会为每个线程设置IPCThreadState(用于通信),创建完后调用joinThreadPool
5、joinThreadPool:把当前线程加入线程池中,监听来自客户端的请求并处理,得到请求后通过executeCommand方法来处理;
 

3、ServiceManager

ServiceManager的工作示意图如下:

ServiceManger的工作只有3步

binder_open:打开binder设备,与Server在processState初始化时进行的操作类似;
binder_become_contextt_manager:通过ioctl把自己的handle值设置为0,代表独一无二的Manager;
binder_loop:进入一个循环监听请求,并作出响应的处理;


注:不是所有Server进程都能往ServiceManager中注册服务的,只有root或system级别的进程才有注册服务的权限。但ServiceManager中还维护了一个allowed的白名单,上面注明了那些服务是允许被注册的,这些服务可以被任意Server进程注册。

 

4、Client

Client使用服务只需要分为两步就好:
  (1)通过defaultServiceManager方法获取ServiceManager;
  (2)通过ServiceManager的getService方法传入字符串获取相应的服务并操作;