`
zhy20045923
  • 浏览: 157513 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Binder机制分析【一】-简介

阅读更多
Binder,英文意思是别针,回形针。在Android中,它是用于完成进程间通信(IPC),在它的官方网站上是这样定义的。binder是一个分布式的组件架构,它类似于COM和CORBA。
binder 通信是一种client-server 的通信结构,
    1. 从表面上来看,是client 通过获得一个server 的代理接口,对server 进行直接调用;
    2. 实际上,代理接口中定义的方法与server 中定义的方法是一一对应的;
    3.client 调用某个代理接口中的方法时,代理接口的方法会将client 传递的参数打包成为Parcel 对象;
    4. 代理接口将该Parcel 发送给内核中的binder driver.
    5.server 会读取binder driver 中的请求数据,如果是发送给自己的,解包Parcel 对象,处理并将结果返回;
    6. 整个的调用过程是一个同步过程,在server 处理的时候,client 会block 住。
Binder是一种架构,这种架构提供了服务器端接口,Binder驱动,客户端接口三个模块。



Binder服务器:
      Binder服务器实际上是一个Binder对象,该对象一旦创建,就启动了一个隐藏线程,该线程不断的接受Binder驱动所发回的消息,收到消息后,执行Binder对象中的onTransact()
方法。因此,要实现一个Binder服务器,就必须重载onTransact()方法。
Binder驱动:
      Binder服务器端的Binder对象创建时,就会在Binder驱动中创建一个mRemote对象,该对象也是Binder类。客户端要访问Binder服务器时,都需要见过该mRemote对象.
Binder客户端:
      Binder客户端要想访问服务器,必须先获取mRemote对象,然后通过mRemote对象的transact()方法调用。Binder驱动重载了该方法,重载的内容有:
1.以线程间消息通信的模式,像服务器端发送客户端传过来的参数。
2.挂起当前线程(客户端线程),等待服务器端执行完后的通知(notify)。
3.接收服务器端的通知,然后继续执行客户端线程,并返回到客户端代码区。
由此可见,客户端要调用服务器端的binder,必须通过binder驱动进行中转,即存在两个Binder对象,一个服务器端的Binder对象,一个驱动中的Binder对象,不同的是驱动中的Binder对象不会再额外产生一个线程。

下一章介绍下Binder服务器的实现
  • 大小: 62.4 KB
分享到:
评论

相关推荐

    Binder机制分析【二】-Binder服务/客户端实现举例

    本篇文章将深入分析Binder机制,并通过一个实际的例子来阐述Binder服务和客户端的实现。 首先,我们了解Binder的基本概念。Binder是Android独有的,它是一种基于C/S架构的轻量级通信方式。服务端(Server)通过...

    android系统深入浅出binder机制分析

    ### Android系统深入浅出之Binder机制分析 #### 一、 Binder机制概览 在深入探讨Binder之前,我们首先需要理解其在Android系统中的核心地位。Binder机制是Android平台实现跨进程通信(Inter-Process Communication...

    MediaPlayerService Binder机制源码分析及详解

    【MediaPlayerService Binder机制源码分析及详解】 在Android系统中,多媒体播放功能是通过`MediaPlayerService`实现的,它是一个核心服务,负责管理和控制多媒体资源的播放。`Binder`机制是Android系统中进程间...

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

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

    Android底层源码分析_Binder

    **Binder的核心数据结构**包括`binder_work`、`binder_node`、`binder_ref`、`binder_buffer`、`binder_proc`等,它们共同构建了Binder机制的基础框架。 1. **binder_work** - 表示一个工作项,用于记录和跟踪...

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

    ### Android系统的Binder机制之一——Service_Manager #### 一、引言 在深入探讨Android系统中的Binder机制之前,我们首先简要回顾一下Binder机制的基本概念及其重要性。Android系统基于Linux内核,但在进程间通信...

    Binder机制在应用程序框架层的Java接口源代码分析

    #### Binder机制简介 Binder机制主要由以下几部分组成: - **Binder服务**:运行在`Zygote`进程中的`Binder驱动`。 - **Binder代理**:每个应用进程中的`Binder`实例。 - **Binder客户端和服务端**:通常通过接口...

    从java到C解析Binder机制

    Binder机制是Android系统中核心的进程间通信(IPC)方式,它是一种C/S架构,主要由Client、Server和ServiceManager三部分组成。ServiceManager是Google设计的一段简洁的C代码,它的作用在于集中管理系统的各种服务,...

    Android的binder机制研究(C++部分)

    通过上述分析可以看出,Android的Binder机制为不同进程间的通信提供了一种高效、灵活的方式。它不仅仅局限于简单的数据交换,还能实现复杂的服务调用。在C/C++层,通过定义接口、实现本地服务和创建代理对象等方式,...

    Android深入浅出之Binder机制

    通过上述分析,我们可以看出Binder机制是Android系统中一项非常重要的技术。它不仅为进程间的通信提供了坚实的基础,还支持了大量服务的构建和管理。MediaService作为典型的例子,展示了Binder机制的实际应用,帮助...

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

    ### Binder机制在低层的C++接口源代码文件分析 #### 概述 在深入探讨Android系统的Binder机制之前,我们先简要回顾一下Binder的基本概念。Binder是Android系统中的核心组件之一,主要用于实现进程间通信(IPC)。...

    Android平台——Binder机制

    通过上述分析,我们可以清楚地了解到Binder机制在Android平台上的核心作用及其工作原理。Binder机制不仅支持跨进程通信,还提供了灵活的服务管理和注册功能。通过创建特定类型的Binder对象(如`BpBinder`和`BnBinder...

    android binder分析

    Binder 机制分析 以 MediaService 为例,分析 Binder 机制。在 main_mediaserver.cpp 的 main 函数中,我们可以看到 Binder 机制的实现过程。首先,创建了一个 ProcessState 对象,用于管理进程状态。然后,创建了...

    Binder机制.pdf

    ### Binder机制解析与Android IPC深度探索 #### 引言 Binder机制是Android系统中用于实现进程间通信(IPC)的核心技术。尽管Android基于Linux操作系统,但它并没有采用传统的Linux IPC机制,如信号量、共享内存或...

    binder 核心思想分析

    ### Android Binder机制核心思想分析 #### 一、引言 Binder机制是Android系统中实现进程间通信(IPC)的关键技术,其设计精妙且高效,是Android架构中不可或缺的一部分。Binder不仅作为Android系统中各组件间通信...

    Android进程间通信-Binder机制

    Service Manager是Android系统中的一个关键组件,它负责管理所有系统服务,并且作为Binder机制的核心部分之一,充当着Binder守护进程的角色。Service Manager的主要职责包括: - 注册和管理各种服务。 - 提供服务...

    android binder机制 以service的注册为例

    Android的Binder机制是Android系统中实现进程间通信(IPC,Inter-Process Communication)的核心组件,尤其是在服务(Service)注册和交互中起到至关重要的作用。理解Binder机制有助于开发者深入掌握Android系统的...

Global site tag (gtag.js) - Google Analytics