Android binder机制

2022-03-11  本文已影响0人  三十五岁养老

IPC常见方式

image.png
  1. Bundle
  1. 文件共享
  1. AIDL
  1. ContentProvider
  1. Socket

Binder是什么?

Binder是Android提供的一套进程间相互通信框架
系统服务ActivityManagerService,LocationManagerService,等都是在单独进程中的,使用binder和应用进行通信。

Android系统框架

image.png

Android系统分成三层。最上层是application应用层,第二层是Framework层,第三层是native层。
由下图可知几点:

  1. Android中的应用层和系统服务层不在同一个进程,系统服务在单独的进程中。

  2. Android中不同应用属于不同的进程中。

Android应用和系统services运行在不同进程中是为了安全,稳定,以及内存管理的原因,但是应用和系统服务需要通信和分享数据。

优点

Binder通信

image.png

一个进程是不能直接直接操作另一个进程的,比如说读取另一个进程的数据,或者往另一个进程的内存空间写数据,进程之间的通信要通过内核进程才可以
client和service并不想知道binder相关协议,所以进一步client通过添加proxy代理,service通过添加stub来进一步处理与binder的交互。

Activity请求Activity ManagerService服务为例:

服务是在svclist中保存的,svclist是一个链表,因此客户端调用的服务必须要先注册到svclist中。

Binder结构设计

image.png

Binder中使用的设计模式

1、代理模式(Proxy Pattern )
在Android中client不是直接去和binder打交道,client直接和Manager交互,而manager和managerProxy交互,也就是说client是通过managerProxy去和binder进行交互的。同时service也不是直接和binder交互,而是通过stub去和binder交互。

Binder与内存映射mmap

Binder IPC 是基于内存映射(mmap)来实现的,但是 mmap() 通常是用在有物理介质的文件系统上的。
进程中的用户区域是不能直接和物理设备打交道的,如果想要把磁盘上的数据读取到进程的用户区域,需要两次拷贝(磁盘–>内核空间–>用户空间);通常在这种场景下 mmap() 就能发挥作用,通过在物理介质和用户空间之间建立映射,减少数据的拷贝次数,用内存读写取代I/O读写,提高文件读取效率。

而 Binder 并不存在物理介质,因此 Binder 驱动使用 mmap() 并不是为了在物理介质和用户空间之间建立映射,而是用来在内核空间创建数据接收的缓存空间。

一次完整的 Binder IPC 通信过程通常是这样:

Binder传输数据的大小限制

Activity之间传输BitMap的时候,如果Bitmap过大,就会引起问题,比如崩溃等,这其实就跟Binder传输数据大小的限制有关系,在上面的一次拷贝中分析过,mmap函数会为Binder数据传递映射一块连续的虚拟地址,这块虚拟内存空间其实是有大小限制的

普通的由Zygote孵化而来的用户进程,所映射的Binder内存大小是不到1M的,准确说是 110241024) - (4096 *2) :这个限制定义在ProcessState类中,如果传输说句超过这个大小,系统就会报错,因为Binder本身就是为了进程间频繁而灵活的通信所设计的,并不是为了拷贝大数据而使用的:

系统服务与bindService等启动的服务的区别

image.png

服务可分为系统服务与普通服务
服务的启动方式 :

服务的注册与管理:

使用方式:

Binder请求的同步与异步?

Android APP有多少Binder线程,是固定的么?

Android APP上层应用的进程一般是开启一个Binder线程,而对于SystemServer或者media服务等使用频率高,服务复杂的进程,一般都是开启两个或者更多。驱动会根据目标进程中是否存在足够多的Binder线程来告诉进程是不是要新建Binder线程。

Binder如何精确制导,找到目标Binder实体,并唤醒进程或者线程?

参考链接:
https://blog.csdn.net/happylishang/article/details/62234127
https://www.jianshu.com/p/adaa1a39a274

上一篇 下一篇

猜你喜欢

热点阅读