Binder机制总结

本文详细介绍了Android中的Binder机制,作为Android系统中实现跨进程通信的主要方式。内容包括Binder的使用场景,如Intent、文件共享、Messenger、AIDL、ContentProvider等,并对比了Linux的IPC机制。文章强调了Binder在性能、安全性的优势,并解析了Binder通信流程,涉及ServiceManager、Client、Server、Binder的角色。此外,还提到了匿名Binder的概念,用于建立私有通道,增强通信的隐私和安全性。
摘要由CSDN通过智能技术生成

在android中进行跨进程通信通常有以下几种方式:

  1. 使用Intent
  2. 使用文件共享
  3. 使用Messenger
  4. 使用AIDL
  5. 使用ContentProvider

其中Intent中可以携带Bundle,而Bundle实现了Parcelable接口,所以可以在不同的进程间进行传输。文件共享就是读写文件,比如常用的SharedPreferences就是以XML来存储的文件。而Messenger,AIDL,ContentProvider都是基于Binder的,所以学习并理解Binder就尤为重要。

虽然Android继承使用Linux的内核,但Linux与Android的通信机制不同。

在Linux中使用的IPC通信机制如下:

传统IPC:无名pipe, signal, trace, 有名管道

AT&T Unix 系统V:共享内存,信号灯,消息队列

BSD Unix:Socket

而在Android中,并没有使用这些,取而代之的是Binder机制。Binder机制是采用OpenBinder演化而来,在Android中使用它的原因如下:

采用C/S的通信模式。而在linux通信机制中,目前只有socket支持C/S的通信模式,但socket有其劣势,具体参看第二条。

有更好的传输性能。对比于Linux的通信机制,

socket:是一个通用接口,导致其传输效率低,开销大;

管道和消息队列:因为采用存储转发方式,所以至少需要拷贝2次数据,效率低;

共享内存:虽然在传输时没有拷贝数据,但其控制机制复杂(比如跨进程通信时,需获取对方进程的pid,得多种机制协同操作)。

安全性更高。Linux的IPC机制在本身的实现中,并没有安全措施,得依赖上层协议来进行安全控制。而Binder机制的 UID/PID是由Binder机制本身在内核空间添加身份标识,安全性高;并且Binder可以建立私有通道,这是linux的通信机制所无法实现的 (Linux访问的接入点是开放的)。

那什么是Binder呢?

  1.     从IPC角度来说,Binder是Android中一种跨进程通信的方式。
  2.     从Android FrameWork角度来说,Binder是ServiceManager连接各种Manager和相应ManagerService的桥梁。
  3.     从Android应用层的角度来说, BInder是客户端和服务端进行通信的媒介。

Binder通信机制流程(整体流程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽蓝丶流月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值