本文行思路

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

图片解释

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

Demo 关键代码分析


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

Client端代码

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

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

远程端LibraryServer 代码

测试结果

AIDL实现IPC

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

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


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


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


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

案例源码

https://github.com/ZhongXiaoHong/AIDLExample

换个角度理解Android的AIDL原理相关推荐

  1. android r.java 原理,深入理解Android消息处理系统原理

    Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制.实际上谷歌参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制. Android通过Looper.Ha ...

  2. 《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构...

    1.3 Android Telephony框架结构 前面对Android手机操作系统整体框架结构及每一层进行了简单的分析和说明,相信大家对Android智能手机操作系统有了一些基本的了解和认识.结合前 ...

  3. 《深入理解Android:Telephony原理剖析与最佳实践》一1.1 智能手机的系统结构

    1.1 智能手机的系统结构 Android手机的基本硬件结构是符合智能手机的基本硬件结构,我们要学习Android移动开发,首先需要了解智能手机的硬件系统基本结构. 随着通信领域的快速发展,移动终端发 ...

  4. 理解Android Binder机制原理

    原文地址: http://blog.csdn.net/universus/article/details/6211589 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥 ...

  5. 理解Android系统的进程间通信原理(二)----RPC机制

    理解Android系统中的轻量级解决方案RPC的原理,需要先回顾一下JAVA中的RMI(Remote Method Invocation)这个易于使用的纯JAVA方案(用来实现分布式应用).有关RMI ...

  6. 理解Android系统的进程间通信原理------RPC机制

    理解Android系统中的轻量级解决方案RPC的原理,需要先回顾一下JAVA中的RMI(Remote Method Invocation)这个易于使用的纯JAVA方案(用来实现分布式应用).有关RMI ...

  7. aidl使用_借助 AIDL 理解 Android Binder 机制——Binder 来龙去脉

    AIDL 是 Android Interface Definition Language(Android 接口定义语言)的缩写,它是 Android 进程间通信的接口语言.由于 Android 系统的 ...

  8. (转载)你真的理解Android AIDL中的in,out,inout么?

    前言 这其实是一个很小的知识点,大部分人在使用AIDL的过程中也基本没有因为这个出现过错误,正因为它小,所以在大部分的网上关于AIDL的文章中,它都被忽视了--或者并没有,但所占篇幅甚小,且基本上都是 ...

  9. 《深入理解Android》一2.1 浏览器工作原理概述

    本节书摘来自华章出版社<深入理解Android>一书中的第2章,第2.1节,作者孟德国 王耀龙 周金利 黎欢,更多章节内容可以访问云栖社区"华章计算机"公众号查看 2. ...

  10. [深入理解Android卷二 全文-第四章]深入理解PackageManagerService

    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容 第 ...

最新文章

  1. 软件测试-培训的套路-log3
  2. Cocos2d入门--3--向量的应用
  3. java 新功能_Java 14的新功能
  4. qemu a fast and portable dynamic translator——大致翻译
  5. python爬虫爬取页面源码在本页面展示
  6. 爱奇艺NLP:BiLSTM_CRF的关键词自动抽取
  7. C++ unordered_map初始化
  8. VPP-20.09版本安装教程(离线版)
  9. 中兴zxr10路由器重启命令_zxr10维护常用命令
  10. 基于Python实现网页版之复杂图片去水印
  11. 修复Win10任务栏开始菜单等系统图标无法点击问题
  12. maven 阿里源配置完整 亲测有效
  13. 一文教你如何在Linux系统上搭建samba文件共享服务器
  14. 永洪科技怎么样_【永洪科技怎么样?】-看准网
  15. Word实用教程——五分钟教你如何在任意页开始添加页码
  16. 对于Spring MCV的理解
  17. 为什么使用 LinkedIn 进行联盟营销活动?
  18. 2011年11月校园招聘JAVA面试题整理
  19. PHP源码整站文件是什么,2015年2月14日,农历腊月二十六出生的宝宝属相是什么...农历2015年3月14日十二生肖属什么?...
  20. ][互动大奖] Webby Awards 2012 第16届威比奖

热门文章

  1. Windows域服务权限提升漏洞(CVE-2021-42287, CVE-2021-42278)
  2. 水电站计算机监控作用,计算机监控系统在水电站中的应用
  3. 调试 STM32F429 + USB3300
  4. 测试基本理论-看这篇就够了
  5. mp3转html,使用javascript将wav转换为mp3
  6. matlab 并联机器人,MATLAB在并联机器人运动仿真中的应用
  7. 本地组策略编辑器计算机配置,如何打开本地组策略编辑器_打开组策略编辑器方法-win7之家...
  8. 场景法设计测试用例ATM机取款问题
  9. python获取鼠标指针坐标_JS获取鼠标指针的位置(坐标)
  10. matlab鼠标箭头黑色,个性化的黑色箭头鼠标指针(falchion光标)安装版本