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. jquery ajax cache的问题

    function test()        {            $.ajax({                type:'GET',                url:"tt. ...

  2. Cookie的Domain

    每个Cookie都有常用的几个元素:name.value.expires.domain Cookie的Domain 设置cookies时,可以设置cookie的域名参数domain,标识cookie在 ...

  3. We're Hiring A Software Tester

    测试人员的基本修养: 代码编写,不可或缺 乔布斯说:Design is not just what it looks like and feel like,design is how it works ...

  4. Spark + Mesos 注意事项

    在使用spark-submit的过程中,需要注意 spark-defaults.conf Spark-defaults.conf的作用范围要搞清楚,编辑driver所在机器上的spark-defaul ...

  5. NodeJS 框架 Express 从 3.0升级至4.0的新特性

    NodeJS 框架 Express 从 3.0升级至4.0的新特性 [原文地址:√https://scotch.io/bar-talk/expressjs-4-0-new-features-and-u ...

  6. linux内存分配机制

    这几天在观察apache使用内存情况,所以特意了解了下linux的内存机制,发现一篇写得还不错.转来看看. 一般来说在ps aux中看到的rss就是进程所占用的物理内存.但是如果将所有程序的rss加起 ...

  7. Java笔记(十二)……类中各部分加载顺序及存放位置问题

    什么时候会加载类 使用到类中的内容时加载,三种情况: 创建对象:new StaticDemo(); 使用类中的静态成员:StaticCode.num = 9;  StaticCode.getNum() ...

  8. Tyvj P1729 文艺平衡树 Splay

    题目: http://tyvj.cn/p/1729 P1729 文艺平衡树 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 此为平衡树系列第二道:文艺平衡树 ...

  9. linux中grep和egrep的用法

    1. grep简介 grep (global search regular expression_r(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大 ...

  10. HW4.34

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...