IPC——AIDL(Android Interface Definition Language)那些事儿
来源:互联网 发布:郑州淘宝网店诈骗案例 编辑:程序博客网 时间:2024/06/01 18:02
Android接口定义语言AIDL,与其他的IDL很类似,客户端和服务器端可以通过有它定义的编程接口来达成共识,以便通过进程间通讯(IPC)完成通讯。IPC(Inner-Process Communication进程间通信)。在android系统中,通常一个进程不允许直接访问另一个进程的内存,因此为了能够实现对话,进程需要把对象分解为操作系统可以识别的原生数据,在跨越进程边界后再组装起来。注意:仅当允许其他应用程序通过IPC方式访问服务,并且服务需要多线程运行时,才必须用到aidl,如果不需要(进行跨越多个应用的)并发ipc,就应该用实现Binder实现接口,或者要进行IPC但是不需要多线程运行,则可使用Messager来实现接口。
Messager实现ipc通信,地层也是使用了aidl的方式,和aidl方式不同的是,Messager方式是利用handler形式来处理,因此,是线程安全的,也表示不支持并发处理;而aidl方式是非线程安全的,支持并发处理,因此,我们使用aidl方式时需要保证代码的线程安全。进程A创建一个Message,将这个对象通过IMessager.send(message)方法传递到进程B,send(message)方法会使用一个parcel对象对Message对象编集,再将Parcel对象传递到进程B,然后解编集,再得到一个和进程A中Message对象一样的对象,再把Message对象加入到进程B的消息队列里,handler会去处理它。
在开始设计Aidl接口之前,注意:对aidl接口的调用是直接函数调用(direct function call),发起调用的线程无法预料。如果是从本地线程发起,则调用将在发起线程中运行。从远程进程发起的调用,将会由系统维护的本地进程内部的线程池分发,必须准备好迎接来自未知线程的调用,并且还可能同时收到多个调用,所以,aidl接口的实现必须完全是线程安全的。
关键字oneway会改变远程线程的处理方式,使用该关键字,远程线程不会阻塞,在发送完交易数据后他会立即返回。接口的实现代码最终将这种远程调用视同由Binder线程池发起的调用一样接收。如果本地调用,则不起作用,调用仍旧是同步执行的。
aidl中只支持方法,不能声明静态成员,支持java简单类型如int,long。。还有String CharSquence list map 方法可以多个参数,也可以不带参数,可以有一个返回值,或者无返回值,其他类型即便是定义于接口所在的包中,也必须包含import,所有非简单类型的参数都需要带一个指明数据方向的标志,可以是in、out或inout,简单类型的参数默认是in,且不能是其他方向值。请按照实际需求来限定参数的方向,因为参数组装过程开销很大。.aidl得代码注释会一并彷如最终生成的IBinder接口中(import和package语句之前的注释除外)。
要跨进程传递某个类,可以通过ipc接口来实现,不过务必确保ipc通道的对端可以识别该类的代码,该类必须支持parcelable接口,支持parcelable接口很重要,这使得android系统可以讲对象分解为能够跨进程组装的原生数据。
- IPC——AIDL(Android Interface Definition Language)那些事儿
- Android Interface Definition Language (AIDL)
- Android Interface Definition Language (AIDL)
- Android Interface Definition Language (AIDL)
- Android Interface Definition Language (AIDL)
- Android Interface Definition Language (AIDL)
- AIDL--Android Interface Definition Language
- Android Interface Definition Language (AIDL)
- Android Interface Definition Language (AIDL)
- Android Interface Definition Language (AIDL)
- Android Interface Definition Language (AIDL)
- AIDL(Android interface Definition Language)
- Android Interface Definition Language (AIDL)
- AIDL(Android Interface Definition Language)
- Android AIDL(Android Interface Definition Language)介绍
- Android AIDL(Android Interface Definition Language)介绍
- Android AIDL(Android Interface Definition Language)介绍
- Android翻译:Android interface definition language(aidl)
- LPSTR、LPCSTR、LPTSTR和LPCTSTR的意义及区别
- launcher3 修改文件夹图标九宫格显示
- POJ 1651 Multiplication Puzzle(区间DP)
- 时间转化 与最近时间的比较返回几天前,几个月前
- LeetCode Valid Palindrome
- IPC——AIDL(Android Interface Definition Language)那些事儿
- C#.Net 知识基础
- csdn博客栏目(个人介绍, QQ交谈, 发送邮件, 新浪微博, 天气预报…添加)
- 小工具
- H.264中整数DCT变换,量化,反量化,反DCT究竟是如何实现的?
- Zend Framework 2 Service Manager 配置方法
- 笔记整理(java基础二---常量,变量...数组)
- lipo -info
- java数组与List互相转换