binder介绍

本文只为读者做简单介绍,读者只需有个概念即可,后续的文章会对binder整个系统进行分析,有人总结的还不错,因此笔者就无需再画图什么的了

博客参考 Android跨进程通信 , Binder概述

为什么使用Binder

我觉得知乎上的这个答案已经给了很好的解释

为什么 Android 要采用 Binder 作为 IPC 机制?

什么是Binder

Linux内核进程空间

一个进程空间分为 用户空间 & 内核空间(Kernel),即把进程内 用户 & 内核 隔离开来

  • 进程间,用户空间的数据不可共享,所以用户空间 = 不可共享空间
  • 进程间,内核空间的数据可共享,所以内核空间 = 可共享空间

进程内 用户空间 & 内核空间 进行交互 需通过 系统调用,主要通过函数

  • copy_from_user():将用户空间的数据拷贝到内核空间
  • copy_to_user():将内核空间的数据拷贝到用户空间

Binder跨进程通信机制模型

Binder模型组成角色说明

Binder模型原理图

Binder概述

  • 从IPC角度来说:Binder是Android中的一种跨进程通信方式,该通信方式在linux中没有,是Android独有;
  • 从Android Driver层:Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder;
  • 从Android Native层:Binder是创建Service Manager以及BpBinder/BBinder模型,搭建与binder驱动的桥梁;
  • 从Android Framework层:Binder是各种Manager(ActivityManager、WindowManager等)和相应xxxManagerService的桥梁;
  • 从Android APP层:Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务端会返回一个包含了服务端业务调用的 Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或者数据,这里的服务包括普通服务和基于AIDL的服务

Binder架构

好了,了解这么多已经足矣,接下去就进入源码世界探个究竟