美文网首页AndroidAndroid开发经验谈Android开发
换个角度理解Android的AIDL原理

换个角度理解Android的AIDL原理

作者: 钟离四郎 | 来源:发表于2017-10-22 20:18 被阅读740次

本文思路

本篇文章笔者谈论的是android使用AIDL进行进程间通信原理,但本文不打算一上来就介绍如何使用AIDL,本文会先假设Android没有提供AIDL我们应该如何“用自己的方式”实现IPC,介绍完这一点之后,本文再对比AIDL这种方式实现IPC,并尝试理解AIDL背后代码之间的关系。下文图片是本文“用自己的方式”实现IPC的案例交互图,如下:

LibraryServer跨进程提供图书查询服务流程图.png

图片解释

蓝色部分的LibraryServer和Client是本文案例中两个不同的APP,其中LibraryServer能够提供左边绿色部分的“BookCheckService”服务(包含getBookInfo、getBookList),为了能够拥有提供远程服务的能力LibraryServer同时还“招聘”了Binder这种具有远程交互能力的对象,于是LibraryServer通过“BookCheckService”+"Binder"这对组合就拥有提供远程服务的能力了。而Client也是“招聘”了Binder,企图通过Binder来使用远程服务。“黄色部分”又是什么意思呢?其实这只是笔者对Binder机制在底层通信进行的极简的描述,实际上Binder机制在底层通信十分复杂,笔者打算放在其它篇章讨论;“黄色”部分简单地解释了远程服务LibraryServer其实是将它自己的Binder的句柄注册在内核,Client实际上拿到的只是LibraryServer的Binder的句柄,通过内核的Binder映射,再与远程服务交互。

Demo 关键代码分析

image.png

上文是Client APP运行后的显示效果,功能很简单,下面对主要代码进行说明:

Client端代码
image.png image.png

下面这个函数是请求“查询图书信息”远程服务的实现逻辑

image.png

同样请求“获取图书列表”远程服务的实现逻辑如下:

image.png
远程端LibraryServer 代码
image.png image.png image.png

测试结果

image.png

AIDL实现IPC

上文提到的是使用“自己的方式”实现IPC,下文介绍在这个案例中是如何使用AIDL通信的,关于如何在AndroidStudio创建AIDL文件,这里笔者不再细说,不清楚的朋友可以参考这篇文章:http://www.jianshu.com/p/d1fac6ccee98,下图为使用AIDL自动生成的代码,如下:

image.png image.png image.png

上图是笔者使用AIDL自动成的BooKCheckService.java文件,可以用下面的UML来描述各个类之间的联系,如下:

image.png

我们先来看以下关键代码:

image.png

再来看看Proxy类中的细节,如下:

image.png

到此可以看到AIDL实现IPC与上文我们以“以自己的方式”实现IPC本质是一样的,只是AIDL语言会为我们自动生成相关的类,简化我们的编码工作。

案例源码

https://github.com/ZhongXiaoHong/AIDLExample

相关文章

  • 换个角度理解Android的AIDL原理

    本文思路 本篇文章笔者谈论的是android使用AIDL进行进程间通信原理,但本文不打算一上来就介绍如何使用AID...

  • 收集_Binder机制

    为什么 Android 要采用 Binder 作为 IPC 机制?AIDL原理解析Android中AIDL的工作原...

  • 对Binder的实现原理的理解

    写给 Android 应用工程师的 Binder 原理剖析简单理解Binder机制的原理 aidl Android...

  • AIDL

    Android中AIDL的基本用法Android 中AIDL的使用与理解Android AIDL使用详解彻底明白A...

  • Android AIDL

    AIDL原理是什么?如何优化多模块都使用AIDL的情况? AIDL(Android Interface Defin...

  • AIDL使用以及原理分析

    AIDL使用以及IPC原理分析(进程间通信) 概要 为了大家能够更好的理解android的进程间通信原理,以下将会...

  • Android源码(9) --- Binder(3) AIDL

    要想了解Binder的原理,结合使用方便我们更简单的去理解调用逻辑。AIDL :Android Interface...

  • Android 进程间通信AIDL(二)

    本文主要来分析一下AIDL实现原理,在Android进程间通信AIDL(一)学习如何使用AIDL时,在Client...

  • Android 重要控件原理

    Android ListView工作原理完全解析,带你从源码的角度彻底理解 Android 自己动手写ListVi...

  • Android中AIDL的工作原理

    在上一篇文章中Android中AIDL的使用详解介绍了AIDL的使用流程,这篇文章我们说说AIDL的工作原理。 I...

网友评论

    本文标题:换个角度理解Android的AIDL原理

    本文链接:https://www.haomeiwen.com/subject/skpcuxtx.html