首页 > 编程知识 正文

android jetpack(android binder机制原理)

时间:2023-05-04 00:39:59 阅读:75935 作者:1301

摘要Binder是安卓系统中一个重要而复杂的概念,在整个系统的运行中起着极其重要的作用。 但是,本文不打算从深层次分析Binder机制。 有两个理由。 一是目前网上已经有两篇优秀文章,二是深入挖掘和驱动Binder机制的分析过程相当困难和耗时,不适合做车轮。 本文的角度是从整体和概念上分析Android的Binder机制,不管Binder到底是什么,Binder与APP应用程序开发的关系是什么,这篇文章都值得一看。

什么是Binder1? 直观上,Binder是一个Android类,继承了IBinder接口

2 .从IPC的角度来说,Binder是Android中的进程间通信方案,Binder也可以被理解为在linux上没有的虚拟物理设备

从Android Framework来看,Binder是连接服务管理器与各种管理器(activity manager、WindowManager、etc )对应的管理器服务的桥梁

对于Android APP应用层来说,Binder是客户端与服务端进行通信的介质,如果有意拨打bindService,服务端会返回包含服务端业务呼叫的Binder对象,并返回该Binder对象这里的服务包括普通服务和基于AIDL的服务

为什么Android内核对BinderAndroid使用大量客户端-服务器(cs ) APP应用方案? 为此需要在安卓内部提供IPC方法,但linux支持的过程通信方式存在性能和安全性两个问题。

目前,linux支持的IPC包括传统的管道、系统IPC (消息队列/共享内存/信号)和套接字,但只有套接字支持客户端-服务器通信方法由于套接字是一种通用的网络通信方式,因此传输效率的降低有很大的开销。 例如,套接字的消息队列和管道采用存储-传输方式。 这意味着数据将从发送方缓存复制到内核打开的缓存,然后从内核缓存复制到接收方缓存。 至少有两次复制过程。 共享内存不需要复制,但控制复杂,难以使用。

在安全方面,安卓作为一个开放、拥有众多开发者的平台,其APP应用来源广泛,确保智能手机的安全非常重要。 最终用户不希望在从互联网下载的程序不知不觉中偷看隐私数据,连接无线网络,长期操作基础设备,电池很快耗尽。 传统的IPC没有任何安全措施,完全依赖高层协商来确保。 首先,传统IPC的接收方不能获取对方进程的可信UID/PID (用户ID/进程ID ),并且不能确定对方的身份。 由于Android为每个已安装的APP应用程序分配了自己的UID,因此进程的UID是标识进程身份的重要标志。 在传统的IPC中,用户只能在分组中写入UID/PID,但这样不可靠,容易被恶意软件利用。 受信任的id标签只是通过IPC机制本身添加到内核中。 其次,传统的IPC接入点是开放的,无法建立专用渠道。 例如,管道的名称、系统v的键值、套接字的ip地址和文件名都是开放的,如果知道这些接入点的程序可以建立与对方的连接,恶意程序就会推测对方的地址并连接

出于以上原因,Android需要建立新的IPC机制,以满足系统对通信方式、传输性能和安全性的要求。 这就是Binder。 Binder基于客户端-服务器通信模式,传输过程只需一次复制,添加uid/PIDidid进行发送,同时支持实名Binder和匿名Binder,安全性高。 下图为Binder通信管理器的示例。

参考:

1.http://www.cn blogs.com/in nost/archive/2011/01/09/1931456.html

2.http://blog.csdn.net/Univers us/article/details/6211589

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。