本文行思路

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

换个角度理解Android的AIDL原理_第1张图片

图片解释

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

Demo 关键代码分析

换个角度理解Android的AIDL原理_第2张图片
上文是Client APP运行后的显示效果,功能很简单,下面对主要代码进行说明:

Client端代码

换个角度理解Android的AIDL原理_第3张图片

换个角度理解Android的AIDL原理_第4张图片

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

换个角度理解Android的AIDL原理_第5张图片

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

换个角度理解Android的AIDL原理_第6张图片

远程端LibraryServer 代码

换个角度理解Android的AIDL原理_第7张图片

换个角度理解Android的AIDL原理_第8张图片

换个角度理解Android的AIDL原理_第9张图片

测试结果

换个角度理解Android的AIDL原理_第10张图片

AIDL实现IPC

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

换个角度理解Android的AIDL原理_第11张图片

换个角度理解Android的AIDL原理_第12张图片

换个角度理解Android的AIDL原理_第13张图片

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

换个角度理解Android的AIDL原理_第14张图片
我们先来看以下关键代码:

换个角度理解Android的AIDL原理_第15张图片
再来看看Proxy类中的细节,如下:

换个角度理解Android的AIDL原理_第16张图片
到此可以看到AIDL实现IPC与上文我们以“以自己的方式”实现IPC本质是一样的,只是AIDL语言会为我们自动生成相关的类,简化我们的编码工作。

案例源码

https://github.com/ZhongXiaoHong/AIDLExample

更多相关文章

  1. 最全的android图片加密
  2. Android 热修复原理和实现
  3. Android HAL层库加载原理
  4. Android中Gif图片的显示
  5. Android IPC进程间通信,Binder机制原理及AIDL实例
  6. Android加载drawable中图片后自动缩放的原理
  7. Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行
  8. Android V1及V2签名原理简析
  9. Android之等比例显示图片

随机推荐

  1. android 环境变量搭建
  2. android 内存使用
  3. android studio下ndk开发
  4. android sdk api的层次结构
  5. Android Things之---Android Things专题
  6. 一行命令得到签名SHA1(Android Studio)
  7. SharedPreferences
  8. android web services
  9. android常见技巧---Android按返回键退出
  10. 3D相册图片滑动+倾斜+放大+倒影处理