Android通信系列目录
Binder通信
博客创建时间:2020.11.06
博客更新时间:2023.03.19
以Android studio build=7.0.0,SDKVersion 31来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已。
前言
Binder机制是 Android系统中跨进程通讯(IPC)的一种方式,Android中ContentProvider、Intent、aidl都是基于Binder。
IPC除了Binder,还有共享内存、Socket、消息队列等其他方式。相比其他的跨进程通信方式Binder有其自身特有的优点:
- Binder使用mmap机制,只拷贝了一次数据,性能上仅次于共享内存
- 采用Client/Server架构,实现面向对象的调用方式,调用如同调用Java对象,使用简单
- 为每个App分配了UID/PID来鉴别身份标识,通信时检测UID/PID进行有效性检测,提高了安全性
阅读该篇博文前建议先阅读《Android 内存映射mmap浅谈》,这样更利于帮助理解Binder通信。
Binder机制
用户空间访问内核空间的唯一方式就是系统调用;通过这个统一入口接口,所有的资源访问都是在内核的控制下执行,以免导致对用户程序对系统资源的越权访问,从而保障了系统的安全和稳定。
Binder通信采用C/S架构,包含Client、 Server、 ServiceManager 以及 Binder 驱动。在 framework 层进行了封装,通过 JNI 技术调用 Native(C/C++)层的 Binder 架构,在 Native 层以 ioctl 的方式与 Binder 驱动通讯。

Client进程
使用服务的进程。
Server进程
提供服务的进程。
ServiceManager进程
Android OS的整个服务的管理程序,在binder通信中ServiceManager的作用是将字符形式的Binder名字转化成Client中对该Binder的引用,使得Client能够通过Binder名字获得对Server中Binder实体的引用。
任何service在被使用之前,均要向SM(Service Manager)注册。当客户端需要访问某个service时,应该首先向SM查询是否存在该服务。如果SM存在这个service,那么会将该service的handle返回给client,handle是每个service的唯一标识符。
Binder
一个进程的Binder线程数默认最大是16,超过的请求会被阻塞等待空闲的Binder线程。所以,在进程间通信时处理并发问题时,如使用Content

本文深入解析Android系统中Binder通信机制,包括Binder的工作原理、通信流程及其在跨进程通信中的应用场景。介绍了Binder机制如何通过mmap内存映射实现高效的数据交换,并通过实例详细展示了Binder通信的具体过程。

2554

被折叠的 条评论
为什么被折叠?



