换个角度理解Android的AIDL原理
本文行思路
本篇文章笔者谈论的是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原理相关推荐
- android r.java 原理,深入理解Android消息处理系统原理
Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制.实际上谷歌参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制. Android通过Looper.Ha ...
- 《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构...
1.3 Android Telephony框架结构 前面对Android手机操作系统整体框架结构及每一层进行了简单的分析和说明,相信大家对Android智能手机操作系统有了一些基本的了解和认识.结合前 ...
- 《深入理解Android:Telephony原理剖析与最佳实践》一1.1 智能手机的系统结构
1.1 智能手机的系统结构 Android手机的基本硬件结构是符合智能手机的基本硬件结构,我们要学习Android移动开发,首先需要了解智能手机的硬件系统基本结构. 随着通信领域的快速发展,移动终端发 ...
- 理解Android Binder机制原理
原文地址: http://blog.csdn.net/universus/article/details/6211589 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥 ...
- 理解Android系统的进程间通信原理(二)----RPC机制
理解Android系统中的轻量级解决方案RPC的原理,需要先回顾一下JAVA中的RMI(Remote Method Invocation)这个易于使用的纯JAVA方案(用来实现分布式应用).有关RMI ...
- 理解Android系统的进程间通信原理------RPC机制
理解Android系统中的轻量级解决方案RPC的原理,需要先回顾一下JAVA中的RMI(Remote Method Invocation)这个易于使用的纯JAVA方案(用来实现分布式应用).有关RMI ...
- aidl使用_借助 AIDL 理解 Android Binder 机制——Binder 来龙去脉
AIDL 是 Android Interface Definition Language(Android 接口定义语言)的缩写,它是 Android 进程间通信的接口语言.由于 Android 系统的 ...
- (转载)你真的理解Android AIDL中的in,out,inout么?
前言 这其实是一个很小的知识点,大部分人在使用AIDL的过程中也基本没有因为这个出现过错误,正因为它小,所以在大部分的网上关于AIDL的文章中,它都被忽视了--或者并没有,但所占篇幅甚小,且基本上都是 ...
- 《深入理解Android》一2.1 浏览器工作原理概述
本节书摘来自华章出版社<深入理解Android>一书中的第2章,第2.1节,作者孟德国 王耀龙 周金利 黎欢,更多章节内容可以访问云栖社区"华章计算机"公众号查看 2. ...
- [深入理解Android卷二 全文-第四章]深入理解PackageManagerService
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容 第 ...
最新文章
- 软件测试-培训的套路-log3
- Cocos2d入门--3--向量的应用
- java 新功能_Java 14的新功能
- qemu a fast and portable dynamic translator——大致翻译
- python爬虫爬取页面源码在本页面展示
- 爱奇艺NLP:BiLSTM_CRF的关键词自动抽取
- C++ unordered_map初始化
- VPP-20.09版本安装教程(离线版)
- 中兴zxr10路由器重启命令_zxr10维护常用命令
- 基于Python实现网页版之复杂图片去水印
- 修复Win10任务栏开始菜单等系统图标无法点击问题
- maven 阿里源配置完整 亲测有效
- 一文教你如何在Linux系统上搭建samba文件共享服务器
- 永洪科技怎么样_【永洪科技怎么样?】-看准网
- Word实用教程——五分钟教你如何在任意页开始添加页码
- 对于Spring MCV的理解
- 为什么使用 LinkedIn 进行联盟营销活动?
- 2011年11月校园招聘JAVA面试题整理
- PHP源码整站文件是什么,2015年2月14日,农历腊月二十六出生的宝宝属相是什么...农历2015年3月14日十二生肖属什么?...
- ][互动大奖] Webby Awards 2012 第16届威比奖
热门文章
- Windows域服务权限提升漏洞(CVE-2021-42287, CVE-2021-42278)
- 水电站计算机监控作用,计算机监控系统在水电站中的应用
- 调试 STM32F429 + USB3300
- 测试基本理论-看这篇就够了
- mp3转html,使用javascript将wav转换为mp3
- matlab 并联机器人,MATLAB在并联机器人运动仿真中的应用
- 本地组策略编辑器计算机配置,如何打开本地组策略编辑器_打开组策略编辑器方法-win7之家...
- 场景法设计测试用例ATM机取款问题
- python获取鼠标指针坐标_JS获取鼠标指针的位置(坐标)
- matlab鼠标箭头黑色,个性化的黑色箭头鼠标指针(falchion光标)安装版本