`
zhengdl126
  • 浏览: 2543260 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

Android中的Binder机制的简要理解

 
阅读更多

我们知道,在Android系统中,每一个应用程序都运行在独立的进程中,这也保证了当其中一个程序出现异常而不会影响另一个应用程序的正常运转。在许多情况下,我们activity都会与各种系统的service打交道,很显然,我们写的程序中activity与系统service肯定不是同一个进程,但是它们之间是怎样实现通信的呢?Binder是android中一种实现进程间通信(IPC)的方式之一。

了解Binder

1.binder用来做什么?用来实现不同进程之间的通信。

2.Binder是什么?binder属于一个驱动,工作在linux层面,运行在内核态,它的操作完成是基于一段内存。所以我们开发的程序中对binder的使用都是通过系统的调用来完成的。

3.binder是怎样实现进程通信的?我们来通过Binder的架构来了解它实现进程间通信(IPC)的过程。

Binder架构由服务端,binder驱动,客户端三个部分构成。如图所示。

 



 

 



Android中的Binder机制的简要理解

其中服务端,客户端处在用户空间,而binder驱动处在内核空间。

服务器端。一个Binder服务器端就是一个Binder类的对象。当创建一个Binder对象后,内部就会开启一个线程,这个线程用于接收binder驱动发送的信息,收到消息后,会执行相关的服务代码。、

Binder驱动。当服务端成功创建一个Binder对象后,Binder驱动也会相应创建一个mRemote对象,该对象的类型也是Binder类。客户就可以借助这个mRemote对象来访问远程服务。

客户端。客户端要想访问Binder的远程服务,就必须获取远程服务的Binder对象在binder驱动层对应的mRemote引用。当获取到mRemote对象的引用后,就可以调用相应Binder对象的服务了。

在这里,我们可以看到,客户端是通过Binder驱动来调用服务端的相关服务。首先,在服务端创建一个Binder对象,然后相应在Binder驱动中创建一个Binder对象,接着客户端通过获取Binder驱动中Binder对象的引用来调用服务端的服务。在Binder机制中正是借着Binder驱动将不同进程间的组件bind(粘连)在一起,实现通信。

为什么android选用Binder来实现进程间通信?

一、可靠性。在移动设备上,通常采用基于Client-Server的通信方式来实现互联网与设备间的内部通信。目前linux支持IPC包括传统的管道,System V IPC,即消息队列/共享内存/信号量,以及socket中只有socket支持Client-Server的通信方式。Android系统为开发者提供了丰富进程间通信的功能接口,媒体播放,传感器,无线传输。这些功能都由不同的server来管理。开发都只关心将自己应用程序的client与server的通信建立起来便可以使用这个服务。毫无疑问,如若在底层架设一套协议来实现Client-Server通信,增加了系统的复杂性。在资源有限的手机 上来实现这种复杂的环境,可靠性难以保证。

二、传输性能。socket主要用于跨网络的进程间通信和本机上进程间的通信,但传输效率低,开销大。消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的一块缓存区中,然后从内核缓存区拷贝到接收方缓存区,其过程至少有两次拷贝。虽然共享内存无需拷贝,但控制复杂。比较各种IPC方式的数据拷贝次数。共享内存:0次。Binder:1次。Socket/管道/消息队列:2次。

三、安全性。Android是一个开放式的平台,所以确保应用程序安全是很重要的。Android对每一个安装应用都分配了UID/PID,其中进程的UID是可用来鉴别进程身份。传统的只能由用户在数据包里填写UID/PID,这样不可靠,容易被恶意程序利用。而我们要求由内核来添加可靠的UID。

所以,出于可靠性、传输性、安全性。android建立了一套新的进程间通信方式。

  • 大小: 24 KB
分享到:
评论

相关推荐

    Android系统的Binder机制之一——Service_Manager

    在深入探讨Android系统中的Binder机制之前,我们首先简要回顾一下Binder机制的基本概念及其重要性。Android系统基于Linux内核,但在进程间通信(IPC)方面并没有采用传统的Linux IPC机制,而是设计并实现了自己的...

    Android进程间通信-Binder机制详解

    **一、Binder机制简要介绍** 1. **Binder组件构成** - **Client**:发起请求的一方,通常在应用程序进程中运行。 - **Server**:提供服务的一方,可能在单独的进程中运行。 - **Service Manager**:作为Binder...

    Android进程间通信-Binder机制

    ### Android进程间通信...通过以上六个方面的详细介绍,我们不仅对Binder机制有了更深入的理解,还了解了其在实际应用中的实现细节。对于开发者而言,深入掌握Binder机制对于构建高效稳定的Android应用程序至关重要。

    Binder机制在低层的C++接口源代码文件分析

    在深入探讨Android系统的Binder机制之前,我们先简要回顾一下Binder的基本概念。Binder是Android系统中的核心组件之一,主要用于实现进程间通信(IPC)。通过Binder机制,不同进程间的组件能够相互通信并共享数据。...

    Android进程间通信(IPC)机制Binder守护进程之路

    在上一篇文章中,我们简要介绍了Android系统中的进程间通信(IPC)机制Binder及其整体架构。Binder机制由四大核心组件构成:客户端(Client)、服务端(Server)、服务管理器(Service Manager)以及驱动程序(Binder ...

    Android进程间通信(IPC)机制Binder简要介绍

    总之,Binder机制是Android系统的重要组成部分,理解和掌握其工作原理对于Android开发至关重要,无论是系统级开发还是应用程序开发,都有可能需要利用到这一强大的通信工具。通过阅读源码和相关文档,开发者可以更...

    深入理解android 卷II 目录

    - **Binder架构总览**:解释了Binder机制的作用以及它是如何作为Android系统中进程间通信的基础的。 - **初始化Java层Binder框架**:详细说明了Binder框架是如何在Java层初始化的,包括关键类和服务的创建。 - **...

    Android框架简介

    1. **Binder**:Binder是Android的进程间通信(IPC)机制,它允许不同进程间的对象和服务进行安全的数据交换。 2. **ServiceManager**:ServiceManager是服务管理的服务器端,它负责注册和查找系统服务,使得其他...

    android各组件详解- Service

    在深入探讨Service组件之前,我们首先简要回顾一下Android框架中的其他关键组件,尤其是ContentProvider。ContentProvider作为数据访问层,它提供了跨应用共享数据的能力,允许不同应用程序之间安全地交换和访问数据...

    Android 淺探(二):系統架構

    Android的另一个独特之处是Binder IPC机制,它为系统服务和应用程序之间提供了高效的数据交换途径。这种机制使得不同进程之间的通信变得高效且安全,是Android系统组件间协作的核心。 此外,Android还包括一系列...

    Android 4.2 Input 研究分析

    本文重点介绍 Android 4.2 输入事件处理的关键组件及其工作原理,并简要概述后续版本中可能存在的变化。 #### 1. 关键组件 ##### 1.1 WindowManagerService WindowManagerService 是 Android 系统中负责管理窗口...

    Aidl服务详细介绍,包括使用方法和分析。

    AIDL的服务调用过程涉及到 Binder 机制,这是Android系统内部的一种轻量级进程间通信方式。Binder允许服务端和客户端之间传递对象,而不仅仅是数据。此外,当服务被多个客户端连接时,Android系统会自动处理多线程...

Global site tag (gtag.js) - Google Analytics