AndroidIPC进程间通信 binder机制&aidl远程服务demo

Android系统中大量使用了基于C/S架构的通信方式,例如发送短信,拨打电话,视频音频捕获,传感器等都以服务(Service)的形式提供,并由相应的Server负责管理;应用程序作为Client只需要与这些Server建立连接并发送请求便能使用这些服务;因此,开发者完全不必关心Service的实现细节,直接与Server建立连接然后使用其提供的接口即可;Client和Server一般是运行在不同的进程中的,这就涉及到进程间通信(IPC,Inter-Process Communication)

为了保证系统安全性,提高通信效率以及提供对C/S架构的支持,Android采用了一种基于共享内存的IPC机制——Binder机制.

Binder:

为了实现Binder IPC机制,Android在Linux内核挂载了一个虚拟的设备/dev/binder;Client和Server进程运行在用户空间,使用Binder机制进行进程间通信时,双方看起来是“直接”通信的,实际上通过/dev/binder的驱动程序即Binder驱动进行了数据的中转,Binder机制的本质是共享内存,共享内存区的管理完全由Binder驱动来完成,对应用层的Client和Server来说是完全透明的。(驱动是控制来访问内存的一段小应用程序,但是驱动控制的是硬件内存的读写 )

摘选网上一张图展现Binder它们关系 

Server1和Server2注册在ServiceManager中,Client调用Server,首先需要通过Binder从ServiceManager获取Server的代理对象,Client调用代理对象的方法,ServiceManager会帮它调用Server1或2对应的方法

进程间通讯的实现方式:

  • Intent

常规的情况下, A 应用去激活B应用中的组件的时候,这实际上就是一种IPC通信的体现, 这个时候发送是Intent 就是在做ipc通信 ,intent 也是去实现 paraceable 接口的, ipc 通信时 传递的非8 种基本数据类型都需要去实现这个接口

  • AIDL: android interface defination language

进程间通信, 除了使用intent之外,还可以使用远程服务调用,一般来说操作系统每开一个应用程序就会分配一个进程,进程是之间彼此独立的,内存空间也是 满足两个进程之间 接口数据的交换

Messager做IPC通信底层同样适用的是AIDL方式;和AIDL方式不同的是,Messager是利用Handler形式处理,因此,它是线程安全的,这也表示它不支持并发处理;而AIDL方式是非线程安全的,支持并发处理;所以我们使用AIDL方式时需要保证代码的线程安全.
  • BroadcastReceiver

IPC Demo地址

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值