为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第4天 Android 中的 AIDL 的使用

标签:
Android

课程名称BAT大牛亲授技能+技巧 Android面试快速充电升级
课程章节:Android基础相关面试问题
主讲老师DocMike

课程内容

1.AIDL 介绍

在 Android 中每一个进程都有自己的 VM 实例,都有一块属于自己的独立内存。Binder 就是 Android 中一种跨进程通信方式,Binder 通信采用 c/s 结构,Binder 组件通常包括 Client、Server、ServiceManager 以及 Binder 驱动。具体的通信过程是:

  1. 首先 Server 向 ServiceManager 注册一个服务;
  2. Client 从 ServiceManager 获取服务,这样 Client 就可以与 Server 进行通信。
  3. 真正的数据流是通过底层的 Binder 驱动来实现,这是被系统封装好的。

AIDL 就是应用在 Android 中进程间通信的一种语言,通过 AIDL 可以在一个进程中获取另一个进程的数据和对外提供的方法。AIDL 的本质是帮我们简化了进程间通信的开发工作,它的核心还是 Binder 机制。

2.如何创建 AIDL

通过 AIDL 实现进程间通信,通常包括以下几个步骤:

  1. 创建 AIDL 实体对象(实现 Parcelable 接口),为了跨进程通信时传递数据使用,在 main 目录下创建独立的 aidl 文件夹,aidl 文件的包名要和对应 java 类的包名完全一致。
  2. 在服务端创建 aidl 实例,将服务端的接口包装进去,创建 binder 对象,通过 onBind()方法提供给客户端;
  3. 客户端实现 ServiceConnection,在方法中获取到 aidl 的实例,通过 bindService() 获取到 aidl 实例,从而调用服务端的方法。

3.分析 AIDL 生成的 java 文件

ADIL 文件帮我们生成了 binder 对象,同时生成了跨平台转换类 stub ,以及在不同进程时客户端拿到的代码 proxy 。服务端创建 aidl 的 stub 的实体,stub 既是 binder 也是 IInterface,实现接口中的方法,在onBind中返回给客户端。

整个文件的核心就是静态内部抽象类 stub。stub中包含了一下几项内容:

  1. asInterface() 用来根据不同进程返回 stub 类自己还是 proxy 代理类,如果是在同一进程,就返回 stub 类,如果不在同一进程,就会创建 proxy 代理。
  2. 代理类 proxy 用来向远程进程包装数据、发送数据、解析返回结果。
  3. onTransact() 方法作为服务端进程调用,用来处理客户端进程传递过来的数据。
  4. IInterface 接口的功能方法,stub 继承了接口,这些方法用来处理客户端进程的具体业务。

课程收获

这一节详细介绍了 AIDL 的创建和使用,从应用层面看使用 AIDL 解决了进程间的通信问题,其核心是 Binder 机制,从 Framework 层来看 Binder 又是链接各种 Manager 和 ManagerService 的桥梁。
图片描述
图片描述
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
12
获赞与收藏
17

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消