Binder,英文的意思是别针、回形针。我们经常用别针把两张纸"别"在一起,而在Android中,Binder用于完成进程间通信(IPC),即把多个进程"别"在一起。比如,普通应用程序可以调用音乐播放服务提供的播放、暂停、停止等功能。
Binder工作在Linux层面,属于一个驱动,只是这个驱动不需要硬件,或者说其操作的硬件是基于一小段内存。从线程的角度来讲,Binder驱动代码运行在内核态,客户端程序调用Binder是通过系统调用完成的。
Binder是一种架构,这种架构提供了服务端接口、Binder驱动、客户端接口三个模块,如图所示。
首先来看服务端。一个Binder服务端实际上就是一个Binder类的对象,该对象一旦创建,内部就启动一个隐藏线程。该线程接下来会接收Binder驱动发送的消息,收到消息后,会执行到Binder对象中的onTransact()函数,并按照该函数的参数执行不同的服务代码。因此,要实现一个Binder服务,就必须重载onTransact()方法。
可以想象,重载onTransact()函数的主要内容是把onTransact()函数的参数转换为服务函数的参数,而onTransact()函数的参数来源是客户端调用transact()函数时输入的,因此,如果transact()有固定格式的输入,那么onTransact()就会有固定格式的输出。
下面再看Binder驱动。任意一个服务端Binder对象被创建时,同时会在Binder驱动中创建一个mRemote对象,该对象的类型也是Binder类。客户端要访问远程服务时,都是通过mRemote对象。
最后来看应用程序客户端。客户端要想访问远程服务,必须获取远程服务在Binder对象中对应的mRemote引用。获得该mRemote对象后,就可以调用其transact()方法,而在Binder驱动中,mRemote对象也重载了transact()方法,重载的内容主要包括以下几项。
以线程间消息通信的模式,向服务端发送客户端传递过来的参数。
挂起当前线程,当前线程正是客户端线程,并等待服务端线程执行完指定服务函数后通知(notify)。
接收到服务端线程的通知,然后继续执行客户端线程,并返回到客户端代码区。
从这里可以看出,对应用程序开发员来讲,客户端似乎是直接调用远程服务对应的Binder,而事实上则是通过Binder驱动进行了中转。即存在两个Binder对象,一个是服务端的Binder对象,另一个则是Binder驱动中的Binder对象,所不同的是Binder驱动中的对象不会再额外产生一个线程。
分享到:
相关推荐
**Binder的核心数据结构**包括`binder_work`、`binder_node`、`binder_ref`、`binder_buffer`、`binder_proc`等,它们共同构建了Binder机制的基础框架。 1. **binder_work** - 表示一个工作项,用于记录和跟踪...
通过对Android Binder框架的深入研究,我们可以发现其不仅为Android提供了高效的进程间通信手段,还为系统的整体架构带来了灵活性和扩展性。Binder的设计理念和实现方式对于理解Android底层机制具有重要意义。然而,...
##### 3.1 Binder框架概述 如图5-1所示,Binder框架主要包括服务端、Binder驱动和客户端三个部分。 ![图5-1 Binder框架](#) - **服务端**:负责提供特定的服务。服务端通过创建Binder对象,并重写`onTransact()`...
一、Binder概述 Binder是Android系统独特的IPC机制,它允许不同进程之间的对象交互,提供了服务的远程调用能力。在Android中,服务、Content Provider、Broadcast Receiver等组件的跨进程通信都依赖于Binder。 ...
Binder系统不仅提供了基础的通信框架,还支持跨进程调用(RPC,Remote Procedure Call)以及安全策略的实施。本文将深入探讨Android Binder的原理、实现方式以及其在Android开发中的应用。 一、Binder机制概述 1.1...
Android系统使用的Linux内核包含了一些专用驱动,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,这些Android专用驱动构成了Android运行时的基石。Android运行时从下到上又包括了HAL层、应用...
1. **Binder框架概述** Binder框架允许不同进程间的对象交互,提供了一种跨进程的对象引用机制。它包含了Client、Service和Binder驱动三部分,通过Binder接口和代理对象实现进程间的通信。 2. **OpenBinder结构** ...
### Android框架概述 Android操作系统是基于Linux内核的一个开放源代码平台,它为移动设备提供了一个完整的软件栈,包括操作系统、中间件和关键的应用程序。Android框架层(Framework Layer)位于Linux内核之上,...
#### 一、Linux 内核与驱动概述 **Android** 是一个基于 **Linux** 内核的操作系统,它不仅适用于移动设备,还广泛应用于各种智能硬件产品中。Android 的核心优势之一在于其强大的内核支持与丰富的驱动程序,这些...
这篇文档旨在为初学者提供一个关于Android内核的概述,同时也为后续深入探讨各个驱动程序打下基础。 首先,Android内核包含了对Android平台特有的硬件和功能的支持。例如,Android Binder驱动是Android进程间通信...
二、Android框架概述 Android框架位于Linux内核之上,是Android系统的核心层,主要由各种库和服务组成。它提供了应用程序运行所需的所有核心库和API,包括Activity Manager(活动管理器)、Content Provider(内容...
Binder机制是Android系统的核心组件,它实现了进程间通信(IPC)的高效框架,使得不同进程间的对象和服务能够相互通信。下面将详细讲解Binder机制的原理、源码解析以及AIDL(Android Interface Definition Language...
Android系统架构的具体组成可以参考图1,分为Linux内核、程序库、Android运行时、应用程序框架和应用程序五个部分,每个部分承担了不同的系统功能。 三、Android内核分析 Android内核基于Linux 2.6内核,但并不是...
为了更好地理解这一复杂系统的工作原理,本篇文章将重点解析 Android 音频框架的核心组件及其与 Linux 内核 ALSA 模块之间的交互。 #### 二、Android Audio框架概览 ##### 1. Java 层接口 - **MediaPlayer**: ...
在提供的部分内容中,我们看到了关于Android框架结构的概述。Android的框架被分为四层:应用层(application layer)、应用框架层(application framework layer)、系统库和Android运行时层(system library and ...
#### 一、Android框架概述 Android框架位于Linux内核之上,处于硬件抽象层(HAL)之下,是Android系统架构的重要组成部分。它包括了一系列的服务和APIs,如Activity Manager(活动管理器)、Window Manager(窗口...