Android Binder 面试知识小结

Binder是Android中的一种跨进程通信方式。从Android Framework 角度来说Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager等等)和相应ManagerService的桥梁;从Android应用层来说Binder是客服端与服务端进行通信的媒介。下面 对 Binder 面试知识基本面试知识的做个小结,方便后期知识的回顾、补充。
推荐博文:
简单明了,彻底地理解Binder
Android进程间通信(IPC)机制Binder简要介绍和学习计划

1、 Linux 内核基础知识

  • 进程隔离/虚拟地址空间:
    进程间是相互独立的,数据不能共享,互不干扰,不同的进程分配在不同的虚拟地址空间中。

  • 系统调用:
    对内核保护,只对应用程序开放许可的资源;允许应用程序通过系统调用调用内核的部分开放程序。

  • binder驱动:负责各个应用进程间,通过binder通信内核来进行交互的模块。

3、为什么使用Binder

  • 性能:相比传统的Socket更高效。
  • 安全:安全性高,支持通信双方进行身份验证。

4、Binder通信模型

Android Binder 面试知识小结_第1张图片

1、注册建立ServiceManager表。
2、Service1、Service2通过Binder驱动申请注册到ServiceManager中。
3、Client需要与Service2进行通信,跨进程无法直接通信,需要先通过ServiceManger中查询到Service2。借助Binder驱动返回一个Service2的代理对象。Client直接跟Service2代理对象进行操作,通过Binder驱动映射操作Service2真实对象,从而完成通信。

5、Binder跨进程通信

Android Binder 面试知识小结_第2张图片

  • Service向SM查找表中注册了Object对象的add()方法;
  • Client想调用Service中Object对象的add()方法,需要通过Binder驱动向SM查找表中查询是否有Object对象的add()方法,有则返回Client一个Object对象的代理对象Proxy ;
  • Client 调用代理对象Proxy的add()方法,Binder驱动进行接收处理去调用真实对象Object的add()方法;
  • Object的add()方法执行后返回结果给SM,SM通过Binder驱动将结果返回给Client。
小结:

客户端进程只是持有了服务端进程的一个代理,通过代理对象协助驱动完成跨进程通信。

6、什么是Binder?

  • Binder是一种通信机制;
  • 对于Service来说Binder指的是Binder本地对象,对于Client来说Binder指的是Binder的代理对象;
  • 对于传输过程而言,Binder是可以跨进程传递的对象。

7、AIDL

Android:学习AIDL,这一篇文章就够了(上)

  • 支持的数据传递类型:
    基本数据类型(short 除外)、String、charSequehce、List(元素得序列化)、Map(元素得序列化)、parcelable。

  • 应用场景:
    AIDL: IPC、多个应用程序、多线程;
    Binder: IPC、多个应用程序、没有多线程;
    Messager: IPC、没有多线程;

  • 通信过程:

    • 客户端通过aidl文件生成的java类 中的Stub.asInterface()方法,得到Proxy代理类
    • 通过调用Proxy代理类的方法,将参数进行打包后,调用IBinder 的transact()方法,交给底层处理,再回调onTransact()方法,将参数进行解包,调用服务端对应的方法,并将执行结果返回。

你可能感兴趣的:(android)