前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android之IPC机制问题汇总

Android之IPC机制问题汇总

原创
作者头像
李林LiLin
发布2023-03-03 21:55:16
3200
发布2023-03-03 21:55:16
举报
文章被收录于专栏:Android进阶编程Android进阶编程

1、什么是Binder?

  • 直观来说,Binder是Android中的一个类,它继承了IBinder接口。
  • 从IPC角度来说,Binder是Android中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在linux中没有。
  • 从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager,etc)和相应ManagerService的桥梁。
  • 从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当你bindService的时候,服务端会返回一个包含了服务端业务调用的Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或者数据,这里的服务包括普通服务和基于AIDL的服务。
  • 总结
    • 通常意义上来说,Binder就是指Andriod的通信机制。
    • 对于服务端进程来说,Binder指的是Binder本地对象,对于客户端进程来说,Binder指的是Binder代理对象。
    • 对于传输过程来说,Binder是可以进行跨进程传递的对象。

2、为什么要使用Binder?

  • 性能方面
    • 在移动设备上(性能受限制的设备,比如要省电),广泛地使用跨进程通信对通信机制的性能有严格的要求,Binder相对出传统的Socket方式,更加高效。Binder数据拷贝只需要一次,而管道、消息队列、Socket都需要2次,共享内存方式一次内存拷贝都不需要,但实现方式又比较复杂。
  • 安全方面
    • 传统的进程通信方式对于通信双方的身份并没有做出严格的验证,比如Socket通信ip地址是客户端手动填入,很容易进行伪造,而Binder机制从协议本身就支持对通信双方做身份校检,因而大大提升了安全性。
  • 实现面象对象的调用方式,在使用Binder时就和调用一个本地实例一样。

3、Binder中是如何进行线程管理的?

  • 每个Binder的Server进程会创建很多线程来处理Binder请求,可以简单的理解为创建了一个Binder的线程池吧(虽然实际上并不完全是这样简单的线程管理方式),而真正管理这些线程并不是由这个Server端来管理的,而是由Binder驱动进行管理的。
  • 一个进程的Binder线程数默认最大是16,超过的请求会被阻塞等待空闲的Binder线程。理解这一点的话,你做进程间通信时处理并发问题就会有一个底,比如使用ContentProvider时(又一个使用Binder机制的组件),你就很清楚它的CRUD(创建、检索、更新和删除)方法只能同时有16个线程在跑。

4、Binder的工作流程是怎样的?

  • 客户端首先获取服务器端的代理对象。所谓的代理对象实际上就是在客户端建立一个服务端的“引用”,该代理对象具有服务端的功能,使其在客户端访问服务端的方法就像访问本地方法一样。
  • 客户端通过调用服务器代理对象的方式向服务器端发送请求。
  • 代理对象将用户请求通过Binder驱动发送到服务器进程。
  • 服务器进程处理用户请求,并通过Binder驱动返回处理结果给客户端的服务器代理对象。
  • 客户端收到服务端的返回结果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、什么是Binder?
  • 2、为什么要使用Binder?
  • 3、Binder中是如何进行线程管理的?
  • 4、Binder的工作流程是怎样的?
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com