Binder

1、Binder 机制的作用和原理?
1) Linux 系统将一个进程分为用户空间和内核空间。对于进程之间来说,用户空间的数据不可共享,内核空间的数据可共享,为了保证安全性和独立性,一个进程不能直接操作或者访问另一个进程,即 Android 的进程是相互独立、隔离的,这就需要跨进程之间的数据通信方式。
2) 一次完整的 Binder IPC 通信过程通常是这样:
a. 首先 Binder 驱动在内核空间创建一个数据接收缓存区;
b. 接着在内核空间开辟一块内核缓存区,建立内核缓存区和内核中数据接收缓存区之间的映射关系,以及内核中数据接收缓存区和接收进程用户空间地址的映射关系;
c. 发送方进程通过系统调用 copyfromuser() 将数据 copy 到内核中的内核缓存区,由于内核缓存区和接收进程的用户空间存在内存映射,因此也就相当于把数据发送到了接收进程的用户空间,这样便完成了一次进程间的通信。

2、Binder 框架中 ServiceManager 的作用?
1) Binder 框架 是基于 C/S 架构的。由一系列的组件组成,包括 Client、Server、ServiceManager、Binder 驱动,其中Client、Server、Service Manager 运行在用户空间,Binder 驱动运行在内核空间
a. Server&Client:服务器&客户端。在 Binder 驱动和Service Manager 提供的基础设施上,进行 Client、Server 之间的通信。
b. ServiceManager(如同 DNS 域名服务器)服务的管理者,将 Binder 名字转换为 Client 中对该 Binder的引用,使得 Client 可以通过 Binder 名字获得Server 中 Binder 实体的引用。
c. Binder 驱动(如同路由器):负责进程之间 binder通信的建立,传递,计数管理以及数据的传递交互等底层支持。

3、AIDL?原理是什么?如何优化多模块都使用 AIDL 的情况?:
1) AIDL(Android Interface Definition Language,Android接口定义语言):如果在一个进程中要调用另一个进程中对象的方法,可使用 AIDL 生成可序列化的参数,AIDL 会生成一个服务端对象的代理类,通过它客户端实现间接调用服务端对象的方法。
2) AIDL 的本质是系统提供了一套可快速实现 Binder 的工具。
关键类和方法:
a. AIDL 接口:继承 IInterface。
b. Stub 类:Binder 的实现类,服务端通过这个类来提供服务。
c. Proxy 类:服务器的本地代理,客户端通过这个类调用服务器的方法。
d. asInterface():客户端调用,将服务端的返回的Binder 对象,转换成客户端所需要的 AIDL 接口类
型对象。如果客户端和服务端位于统一进程,则直接返回 Stub 对象本身,否则返回系统封装后的Stub.proxy 对象
e. asBinder():根据当前调用情况返回代理 Proxy 的Binder 对象。
f. onTransact():运行服务端的 Binder 线程池中,当客户端发起跨进程请求时,远程请求会通过系统底层封装后交由此方法来处理。
g transact():运行在客户端,当客户端发起远程请求的同时将当前线程挂起。之后调用服务端的h onTransact()直到远程请求返回,当前线程才继续执行。
3) 当有多个业务模块都需要 AIDL 来进行 IPC,此时需要为每个模块创建特定的 aidl 文件,那么相应的 Service 就会很多。必然会出现系统资源耗费严重、应用过度重量级的问题。解决办法是建立 Binder 连接池,即将每个业务模块的Binder 请求统一转发到一个远程 Service 中去执行,从而避免重复创建 Service。
工作原理:
每个业务模块创建自己的 AIDL 接口并实现此接口,然后向服务端提供自己的唯一标识和其对应的 Binder 对象。服务端只需要一个 Service,服务器提供一个 queryBinder 接口,它会根据业务模块的特征来返回相应的 Binder 对象,不同的业务模块拿到所需的 Binder 对象后就可进行远程方法的调用了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值