一.Linux内核基本知识

  • 进程隔离/虚拟地址空间:进程间是不可以共享数据的,相当于被隔离,每个进程分配不同的虚拟地址中
  • 系统调用:Linux内核对应用有访问的权限,用户只能在应用层通过系统调用,调用系统中的某些程序
  • binder驱动:它负责各个用户的进程,通过binder通信内核来进行交互的模块

二.为什么使用Binder

  • 性能上,相比传统的Socket性能更高
  • 安全性高,支持协议双方相互校验

三.Binder通信模型

  • Service端通过Binder驱动在ServiceManager的查找表中注册object对象的add方法
  • Client端通过Binder驱动在ServiceManager的查找表中查找object对象的add方法,并返回proxyd的add方法
  • proxy的add方法是一个空方法,proxy也不是一个真正Object对象,是通过Binder封装的一个代理对象
  • Client端调用add方法,Client端通过Binder驱动将proxy对象的add方法来请求ServiceManager来找到Service端真正的add方法

四.AIDL

  • 客户端通过AIDL的Stub.asInterface()方法,拿到Proxy代理类
  • 通过调用Proxy代理类的方法,将参数封包后,调用底层transact()方法
  • transact()方法会回调onTransact()方法进行参数的解封
  • 在onTransact()方法中调用服务端的方法,并将结果返回

results matching ""

    No results matching ""