一、Linux内核的基础知识

1.进程隔离/虚拟地址空间(每个进程以为自己独占了一个内存空间,其实是虚拟的,通信需binder)

2.系统调用(内核保护机制告诉程序只能访问许可的资源,内核层与用户空间分离开来,用户可以通过系统调用在用户空间访问内核的某些程序)

3.binder驱动(运行在内核空间中负责各个用户进程通过binder通信的内核来进行交互的一个模块)

 

二、Binder通信机制介绍

1.为什么要使用binder

1)Android使用的Linux内核拥有着非常多的跨进程通信机制

2)性能(相较之传统的Socket更加高效)

3)安全(有对进程间通信双方的身份校验)

 

2.binder通信模型

1)通信录:serviceManager

2)电话基站:binder驱动

 Android基础-Binder

 

3.binder通信机制原理

 Android基础-Binder

一句话总结:客户端进程只不过是持有了我们服务器端的代理,我们通过代理对象协助驱动去完成了跨进程通信

 

到底什么是binder!!

1)通常意义下,Binder指的是一种通信机制

2)对于Server进程来说,Binder指的是Binder本地对象/对于Client来说,Binder指的是Binder代理对象

3)对于传输过程而言,Binder是可以进行跨进程传递的对象


三、AIDL

AIDL (Android Interface Definition Language) 是一种接口定义语言,用于生成可以在Android设备上两个进程之间进行进程间通信(Interprocess Communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数,来完成进程间通信。

 

简言之,AIDL能够实现进程间通信,其内部是通过Binder机制来实现的,后面会具体介绍,现在先介绍AIDL的使用。

 

AIDL的实现一共分为三部分,一部分是客户端,调用远程服务。一部分是服务端,提供服务。最后一部分,也是最关键的是AIDL接口,用来传递的参数,提供进程间通信。

 

Stub静态内部类(策略模式)

 Android基础-Binder

 

**asInterface方法(如果ab是同一进程就不跨进程,否则返回一个Proxy代理类,通过代理对象获取远端数据)

 Android基础-Binder

 

**onTransact方法(根据AIDL函数返回的编号来进行方法调用,这里为传入compute方法的编号来调用compute方法)

Android基础-Binder


相关文章:

  • 2021-05-15
  • 2021-09-14
  • 2021-12-14
  • 2022-12-23
  • 2021-11-15
  • 2021-06-15
  • 2021-09-22
猜你喜欢
  • 2021-10-26
  • 2021-04-21
  • 2021-12-20
  • 2021-07-30
  • 2021-04-16
相关资源
相似解决方案