您的位置:首页 > 移动开发 > Android开发

android binder机制---概述

2017-06-12 19:27 309 查看

 1,概述

简单地说,Binder是Android平台上的一种跨进程交互技术。在Android的应用层次上,基本上已经没有过去的进程概念了。

然而在实现层次,它毕竟还是要建构在一个个进程之上的。实际上,在Android内部,那些支撑应用的组件往往会身处于

不同的进程,那么应用的底层必然会牵涉大量的跨进程通信。为了保证通信的高效性,Android提供了Binder机制。

从进程角度来看IPC机制



Binder通信采用C/S架构,从组件视角来说,包含Client、Server、ServiceManager以及binder驱动,其中ServiceManager用于

管理系统中的各种服务。架构图如下所示:



可以看出无论是注册服务和获取服务的过程都需要ServiceManager,需要注意的是此处的Service Manager

是指Native层的ServiceManager(C++),并非指framework层的ServiceManager(Java)。ServiceManager

是整个Binder通信机制的大管家,是Android进程间通信机制Binder的守护进程,要掌握Binder机制,首先需

要了解系统是如何首次启动Service Manager。当Service Manager启动之后,Client端和Server端通信时都需

要先获取Service Manager接口,才能开始通信服务。

    图中Client/Server/ServiceManage之间的相互通信都是基于Binder机制。既然基于Binder机制通信,那么同样

也是C/S架构,则图中的3大步骤都有相应的Client端与Server端。

  1,注册服务(addService):Server进程要先注册Service到ServiceManager。该过程:Server是客户端,

    ServiceManager是服务端。

2,获取服务(getService):Client进程使用某个Service前,须先向ServiceManager中获取相应的Service。该过程:

    Client是客户端,ServiceManager是服务端。

3,使用服务:Client根据得到的Service信息建立与Service所在的Server进程通信的通路,然后就可以直接与Service交互。

   该过程:client是客户端,server是服务端。

图中的Client,Server,Service Manager之间交互都是虚线表示,是由于它们彼此之间不是直接交互的,而是都通过与

Binder驱动进行交互的,从而实现IPC通信方式。其中Binder驱动位于内核空间,Client,Server,Service Manager位于

用户空间。Binder驱动和Service Manager可以看做是Android平台的基础架构,而Client和Server是Android的应用层,

开发人员只需自定义实现client、Server端,借助Android的基本平台架构便可以直接进行IPC通信。

本系列文章都是基于android 6.0。

其中,虽然只是涉及到2个进程之间的通信,但是还有用户态和内核态(binder驱动)交互,所以比较难懂。本文主要包括以下部分:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android binder机制