深入浅出Android-Binder机制(图文+源码深入剖析)

本文深入解析Android的Binder机制,通过实例详细解释了AIDL如何生成接口及其实现类,以及如何在本地和远程调用中发挥作用。Binder机制的核心在于Stub和Proxy,它们分别处理本地调用和服务端的请求。Stub实现了服务提供的功能,而Proxy负责参数封装和IPC操作。通过源码分析,展示了onTransact()方法在处理请求和响应中的关键作用。此外,文章还探讨了如何判断Service是否运行在同一进程,并给出了无需AIDL实现Service通信的示例。
摘要由CSDN通过智能技术生成

AIDL 生成的就是 IMyService 这个接口,而 StubProxy 则是这个接口的两个内部类,分别是 Binder 类和 BinderProxy 类的子类(Proxy 类虽然是用组合方式来持有 BinderProxy 的,但实际就是在直接用这个类,只不过做了一层封装,让其更易使用而已),StubProxy 都实现了 IMyService

所以 IInterface 到底是什么,它就是一个用于表达 Service 提供的功能的一个契约,也就是说 IInterface 里有的方法,Service 都能提供,调用者你别管用的是 BinderProxy 还是什么,只要拿到 IInterface,你就可以直接调用里面的方法,它就是一个接口。

同时 Stub 虽然实现了 IMyService,但是并没有实现厘米的任何方法,它是一个抽象类,开发者需要自己子类化 Stub 去实现具体的功能。
Proxy 实现了 IMyService,并且实现了里面的方法,这些方法的实现我们下面再说。

为什么 IMyService 要分 StubProxy 呢?这是为了要适用于本地调用和远程调用两种情况。如果 Service 运行在同一个进程,那就直接用 Stub,因为它直接实现了 Service 提供的功能,不需要任何 IPC 过程。如果 Service 运行在其他进程,那客户端使用的就是 Proxy,这里这个 Proxy 的功能大家应该能想到了吧,就是把参数封装后发送给 Binder 驱动,然后执行一系列 IPC 操作最后再取出结果返回。

好,到这里请求用 Proxy 发出去了,Service 怎么接受请求并作出响应呢,这就需要 Stub 了,还记得我们的 Stub 是继承自 Binder 的吗?Binder 有一个 onTransact 方法,而 Stub 重写了这个函数,这个函数三个重要参数:int codePar

  • 28
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值