Android 系统 Binder 详解

移动开发 Android
binder是什么?可以理解为Andorid系统中的一种进程间通信的方式,虽然Android系统基于Linux,但是它并没有采用Linux自带的进程间通信方式,而是采用了更高效的binder,理解binder对于理解Android系统具有至关重要的作用。

[[422252]]

本文转载自微信公众号「嵌入式Linux系统开发」,作者asonangel。转载本文请联系嵌入式Linux系统开发公众号。

最近博主在研究Android系统的binder。

binder是什么?可以理解为Andorid系统中的一种进程间通信的方式,虽然Android系统基于Linux,但是它并没有采用Linux自带的进程间通信方式,而是采用了更高效的binder,理解binder对于理解Android系统具有至关重要的作用。binder原理图如下:

Binder通信采用c/s架构,和Socket一样,但是稍微复杂。binder组件包含Client、Server、ServiceManager以及binder驱动,其中ServiceManager用于管理系统中的各种服务。

具体通信过程:Server先向ServiceManager注册一个服务,其实也就是一个字符串。然后Client从ServiceManager获取服务,关键字就是注册的字符串。这样Client和Server就可以通信。真正的数据流是走了底层的Linux内核空间的binder驱动,但这个是被封装的,所以不用关心真正的binder驱动,只管在Client和Server之间调用函数收发数据就行。就是服务端的onTransact函数和客户端remote()->transact(TEST, data, &reply),发送的数据存在data中,返回的数据存在reply中。Client和Server都可以收发数据。

安卓系统架构图:

理解了binder以后,具体分析:binder驱动肯定是在最下面的Linux内核中,那么binder的客户端和服务器,可以存在在任何地方。举例:

1、bindder服务器在app层,客户端在app层。2、bindder服务器在native层,客户端在app层。3、bindder服务器在app层,客户端在native层。4、bindder服务器在native层,客户端在native层。

以上四种情况都可以。

说的比较抽象,我发两篇文章连接,这两篇文章的代码我已经验证过,可以使用。需要注意的是,APP层的binder由java语言编写,native层的binder,由C++语言编写。但其实接口都很相似。

但是要看懂代码,需要先理解几个类:

native层binder真实的继承关系如下:

对称一点可能方便理解:

我们主要是从BnInterface和BpInterface继承,去实现自己的服务器和客户端。

bp:binder proxy

bn:binder native

 

sm:ServiceManager

 

责任编辑:武晓燕 来源: 嵌入式Linux系统开发
相关推荐

2023-10-09 08:24:54

IPC机制Binder

2010-03-04 09:46:51

Android Bin

2011-08-11 13:41:06

手机病毒

2016-11-28 14:11:24

ANDROID BIN通信架构

2016-11-28 14:44:55

ANDROID BIN通信架构

2013-01-06 13:06:02

2010-01-28 14:35:21

Android系统信息

2013-01-06 15:20:58

Android开发Android振动器

2011-06-01 10:48:28

Android系统

2010-01-25 14:13:36

Android菜单系统

2023-03-23 09:33:22

Android移动开发

2011-05-05 14:44:43

SurfaceFlinSurfaceActivity

2011-05-04 09:48:14

2013-11-05 11:25:21

Android 4.4系统详解

2011-05-16 09:27:14

Android 3.1谷歌

2017-03-31 21:15:36

进程线程池Binde

2014-07-28 10:09:30

Android

2011-05-27 15:02:15

Android ListView

2013-11-14 10:42:48

MTPAndroid

2014-07-24 09:11:34

点赞
收藏

51CTO技术栈公众号