美文网首页
android中的进程通信和Binder机制

android中的进程通信和Binder机制

作者: breaktian | 来源:发表于2018-04-02 18:10 被阅读15次

进程间通信的方式

  • 共享内存

    1. 创建共享内存区int shmget(key_tkey,size_t size,int shmflg)
    2. 映射内存共享区shmatchar *shmat(int shmid,viod *shmaddr,int shmflag)
  • 管道(Pipe)
    1.管道是单向的像水管一样,要建立读和写两个管道
    2.管道容量有限 当pipe满时,会阻塞
    3.linux提供了pipe接口打开一个管道 int pipe(int pipefd[2],int flags)

  • Unix Domain Socket(UDS)
    1.cs模式 network socket就是uds
    2.对于同一机器的进程间通信,uds也可以完全胜任
    3.android版本以前android全部是使用binder进行进程间通信的,后来有一部分不得不使用uds代替,可见uds还是有一定优势的

同步机制的经典实现

  • 信号量(Semaphore)
  • Mutex
  • 管程(Monitor)

android中的同步机制

  • Mutex
  • Condition
  • Barrier

android进程间通信的主要方式binder机制

如果统观Binder中的各个组成元素,就会惊奇的发现它和TCP/IP网络有很多相似之处:

  • Binder驱动->路由器
  • Service Manager->DNS
  • Binder Client->客户端
  • Binder Server->服务端

首先Binder是android进程间通信的一种方式,
基本原理:binder定义了4个角色:client,server,serviceManager ,binder驱动
server会创建一个binder实体并起一个名字,然后将名字一块以数据包的形式通过binder驱动发送给serviceManager ,通知servicemanager注册一个名字为xx的Binder,然后client通过名字查询到该Binder 的引用。

注意

  1. Client和Server和ServiceManager实现在用户空间,Binder驱动实现在内核空间中
  2. Binder驱动程序和ServiceManager在Android中已经实现,开发者只需要实现Client和Server
  3. ServiceMagager是一个守护进程,用来管理Server,并向Client提供查询Server接口的能力
  4. Client和Server之间通信,是通过Binder驱动程序间接实现

AIDL

  • AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。是的,首先我们知道的第一点就是:AIDL是一种语言

  • AIDL中的定向 tag 表示了在跨进程通信中数据的流向,其中 in 表示数据只能由客户端流向服务端, out 表示数据只能由服务端流向客户端,而 inout 则表示数据可在服务端与客户端之间双向流通。其中,数据流向是针对在客户端中的那个传入方法的对象而言的。in 为定向 tag 的话表现为服务端将会接收到一个那个对象的完整数据,但是客户端的那个对象不会因为服务端对传参的修改而发生变动;out 的话表现为服务端将会接收到那个对象的的空对象,但是在服务端对接收到的空对象有任何修改之后客户端将会同步变动;inout 为定向 tag 的情况下,服务端将会接收到客户端传来对象的完整信息,并且客户端将会同步服务端对该对象的任何变动。

    All non-primitive parameters require a directional tag indicating which way the data goes . Either in , out , or inout . Primitives are in by default , and connot be otherwise .
    官网是这样解释的:所有的非基本参数都需要一个定向tag来指出数据流通的方式,不管是 in , out , 还是 inout 。基本参数的定向tag默认是并且只能是 in

相关文章

  • Binder 总结

    什么是binder binder是Android 中的一种进程间通信机制(IPC机制) binder 为什么会出现...

  • Binder

    Binder是Android中跨进程通信的一种机制,Binder机制的优点有: 1.高效 Binder数据拷贝只需...

  • Binder驱动注册

    Binder驱动注册 Android进程间利用Binder机制实现通信,在App进程中,调用ioctl方法使程序陷...

  • 2018-09-04 binder

    【转】图文详解 Android Binder跨进程通信的原理 [【转】](Android Binder机制(超级详...

  • 不得不说的Android Binder机制与AIDL

    说起Android的进程间通信,想必大家都会不约而同的想起Android中的Binder机制。而提起Binder,...

  • 关于Handler消息处理机制的几个问题?

    Android系统中的两大机制:Binder IPC机制和Handler消息机制;前者用于进程间通信,后者用于同一...

  • Android 进程通信--Binder机制

    一、起源——为什么在Android中使用binder通信机制? linux中的进程通信 管道包含无名管道和有名管道...

  • Android 基础学习(4) ---- Binder 简要原理

    Binder 简介 Binder是用在Android系统中的一个进程间通信(IPC)机制,使用C/S 服务端和客户...

  • Binder机制总结

    一、Binder机制概述 在Android开发中,很多时候我们需要用到进程间通信,所谓进程间通信,实现进程间通信的...

  • 浅谈Android:分析Binder线程池的启动流程

    Binder Binder它是android中的一种进程间通信机制,它主要采用的是CS架构模式。 Binder框架...

网友评论

      本文标题:android中的进程通信和Binder机制

      本文链接:https://www.haomeiwen.com/subject/pvvxhftx.html