Binder个人简单总结

Android 91es.com站长2023年12月16日 am8:08发布3个月前更新
0
导航号,我的单页导航
目录

前言

Binder对于Android开发,很熟悉,也很陌生。我也经常用,但对其原理不是很了解,因此参考其他大佬的,做一下笔记。

简单记录一下Android中Binder的原理(其实主要摘抄),方便自己回顾。

正文

什么是Binder

Binder是Android中的一种跨进程通信(IPC)的方式。

为啥选择Binder

Android上主要从以下几点考虑

  1. 性能:Binde在数据拷贝只拷贝一次,而管道、消息队列、Socket都需要两次,共享内存不需要拷贝。Binder的性能仅次于共享内存。

  2. 稳定性:Binder基于C/S架构,客户端与服务端彼此独立,稳定性较好。而拷贝性能更好的共享内存,存在并发同步问题,容易出现死锁和资源竟争,稳定性较差。

  3. 安全性:注册服务时,Binder会分配唯一的UID,用来鉴别进程的标志,如果服务是恶意软件启动的服务,那么可以通过UID找到服务并进行禁止。传统IPC是由服务自己往数据包里填入UID/PID去告知内核,这个标记完全是在用户空间控制的,存在恶意篡改的可能。因此Binder的安全性更高。

原理

上面也说了Binder是基于C/S架构,也就是一个Client端,一个Server端。

虚线就是代表Client、Server不是直接与ServiceManager直接交互,而是通过Binder驱动

Binder个人简单总结

注册服务
  1. Server进程向Binder驱动发起服务注册请求

  2. Binder驱动将注册请求转发给ServiceManager进程

  3. Server进程信息添加到ServiceManager

注册成功后,ServiceManager进程拥有Service进程的信息。

获取服务
  1. Client进程想Binder驱动发送获取服务请求,传递需要获取的服务名称

  2. Binder驱动将该驱动请求转发给ServiceManager进程

  3. ServiceManager查找对应的服务信息

  4. 通过Binder驱动将上述服务信息返回给Client进程

PS: Client进程获取到的是Server的代理对象

使用服务
  1. Client进程发送数据到Server进程

  2. Server进程根据Client进程的请求进程执行对应的方法

  3. Server进程将对应方法的结果返回给Client进程

参考文章

  1. 《Android插件化开发指南-包建强》

  2. Binder通信原理

  3. 关于Binder面试详解

版权声明 1、 本站名称 91易搜
2、 本站网址 https://www.91es.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权请留言
4、 本站禁止发布或转载任何违法的相关信息,如有发现请向站长举报
导航号,我的单页导航

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...