AIDL (Android Interface Definition Language),通过定义通信接口来实现进程间通信。这是Google提供的一种在安卓应用进程间通信的工具。所以要了解AIDL的通信原理,我们需要围绕以下两个问题来展开。

1、为什么需要AIDL?

我们都知道AIDL的目的是进行进程间通信。所以在了解AIDL原理之前先要了解一下什么叫进程间通信。进程间通信涉及到两个名词,一个是进程间,一个是通信。进程间就是两个或多个进程之间,所以这里先要明确一个概念,进程间通信涉及到多个实体。其次是通信,什么是通信呢?打电话,发邮件,发QQ消息都是通信,他们之间的共同点就是数据交换。所以简单来说,进程间通信就是多个多个实体间的数据交换,而且这些数据都是运行时数据,因为通信实体是运行时产生的。那么一般情况下,我们的应用程序是怎样进行数据交换呢?最简单的办法就是共享内存,即建立内存共享区,然后进程B往内存共享区里写,进程A从内存共享区里读,从而完成通信。但是在安卓里是行不通的,因为单独的进程是运行在自己的虚拟机里面,有着自己的内存映射,所以内存共享没法实现,只能借助AIDL。

2、AIDL是怎么起作用的?
在这之前,我们先讨论AIDL的实现步骤:
1)、定义AIDL文件;
2)、实现AIDL文件里面定义的接口;
3)、暴露接口;
4)、调用;

这四个过程可以类比于c/s模型,如果一个客户端需要访问服务器中的某一个网页,它需要经过几个步骤呢?同样也是需要四个:
1)、定义通信规则,已经有了现有的规则——tcp/ip协议族;
2)、在服务器中编写网页文件;
3)、暴露资源文件的访问地址;
4)、客户端发起请求,获取资源,完成通信;

从上面这个对比可以看出,这里面的关键就是定义协议这一步,即定义AIDL文件的过程,之后有一个重要的过程,即编译AIDL文件,这里编译器为我们做了一个最重要的一步,生成了一个Stub类,这个类是个抽象类,继承自Binder类,并实现了我们在AIDL文件中定义的接口,所以我们最终对接口对象的操作最终都转换成了Stub对象的操作,具体的通信过程有Stub对象为我们完成了,也就是拆分对象数据,和生成对象数据这些繁琐的事情。所以AIDL的通信原理其实只是定义了通信规则,具体的实现还是靠binder.所以最终的分析结果就是,AIDL将我们需要传递的数据拆分后,通过Binder传递。在访问端AIDL把接收到的结果组装成我们期望的对象,把底层的操作屏蔽了。

AIDL通信原理的更多相关文章

  1. 基于web的IM软件通信原理分析

    关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...

  2. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  3. SSL 通信原理及Tomcat SSL 配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  4. Java 下 SSL 通信原理及实例

    有关SSL的原理和介绍在网上已经有不少,对于Java下使用keytool生成证书,配置SSL通信的教程也非常多.但如果我们不能够亲自动手做一个SSL Sever和SSL Client,可能就永远也不能 ...

  5. Java基础知识强化之网络编程笔记02:Socket通信原理图解

    1. Socket (1)Socket套接字  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字 (2)Socket原理机制:  • 通信两端都有Socket.  • 网 ...

  6. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  7. RS-232通信原理

    rs232串口通信原理 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆).大多数计算机包含两个基于RS232的串口.串口同时也是仪器 ...

  8. SSL 通信原理及Tomcat SSL 双向配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  9. 由于用mpu6050模块,所以要用上i2c通信原理。

    i2c通信原理 i2c总线只有两根双向信号线,一根是数据线SDA,一根是时钟线SCL. 每个接到i2c总线上的器件都有唯一的地址,主机与其他器件之间的数据传送可以是由主机发送给其他器件.主机为发送器, ...

随机推荐

  1. 手势识别官方教程(4)在挑划或拖动手势后view的滚动用ScrollView和 HorizontalScrollView,自定义用Scroller或OverScroller

    简单滚动用ScrollView和 HorizontalScrollView就够.自定义view时可能要自定义滚动效果,可以使用 Scroller或 OverScroller Animating a S ...

  2. 【HDOJ】2062 Subset sequence

    这道题目非常好,饶了点儿圈子.我的思路是,先按照组排列.例如,1            2           31 2         2 1        3 11 2 3      2 1 3  ...

  3. WCF - IIS Hosting

    WCF - IIS Hosting Hosting a WCF service in IIS (Internet Information Services) is a step-by-step pro ...

  4. scaleform mobile sdk for android 多点触摸 修正

    修正 scaleform 的多点触控 (随手一记 给后来的人做个参考) scaleform 版本号 4.2.24 (估计这就是最后一个 移动版的版本了,万年没有更新了) 开始 一直以为 scalefo ...

  5. BZOJ_3039_玉蟾宫_(动态规划+悬线法)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思 ...

  6. [HDU 1963] Investment

    Investment Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu   Descrip ...

  7. LoadLibraryEx及发回hmodule的一些细节

    LoadLibraryEx可以配合 DONT_RESOLVE_DLL_REFERENCES LOAD_LIBRARY_AS_DATAFILE LOAD_LIBRARY_AS_DATAFILE_EXCL ...

  8. 使用Bugfree不应有的坏习惯

    Bugfree是一款优秀的bug管理和追踪工具,因此受到不少公司的青睐.但实际的工作中,我发现不少开发或是测试的同事有一些不好的使用习惯,使得我们对Bugfree的利用不够高效.我下面列出使用Bugf ...

  9. testng 注解

    testng.xml suite(套件):  由一个或多个测试组成 test(测试):  由一个或多个类组成 class(类):  一个或多个方法组成 @BeforeSuite: 在某个测试套件开始之 ...

  10. selenium1.0和selenium2.0页面等待处理详解

    一.selenium1.0页面等待 1.……AndWait 经常会看到, selenium action命令中很多有这种……AndWait后缀, 例如click和clickAndWait命令: cli ...