AIDL是Android Interface Definition Language, 顾名思义,它主要就是用来定义接口的一种语言。Android提供AIDL主要用来进程间通讯。
从AIDL的功能来看,它主要的应用场景就是IPC。虽然同一个进程中的client-service也能够通过AIDL定义接口来进行通信,但这并没有发挥AIDL的主要功能。 概括来说:
- 如果不需要IPC,那就直接实现通过继承Binder类来实现客户端和服务端之间的通信。
- 如果确实需要IPC,但是无需处理多线程,那么就应该通过Messenger来实现。Messenger保证了消息是串行处理的,其内部其实也是通过AIDL来实现。
- 在有IPC需求,同时服务端需要并发处理多个请求的时候,使用AIDL才是必要的
AIDL的简单使用步骤如下:
- 编写.AIDL文件,定义需要的接口
- 实现定义的接口
- 将接口暴露给客户端调用
下面在AS上创建一个工程来使用一下:
创建Aidl文件:
创建完后,可以看到aidl接口文件里面已经为我们提供了案例:
// IMyAidlInterface.aidl
package com.example.aidltest;
// Declare any non-default types here with import statements
interface IMyAidlInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
}
这里先说下AIDL支持下列所述的数据类型:
- 所有的基本类型(int、float等)
- String
- CharSequence
- List
- Map
如果要使用自定义的类型,必须实现Parcelable
接口才能进行进程间通讯。
下面自定义HelloMsg类:
public class HelloMsg implements Parcelable {
private String name;
private int age;
public HelloMsg(String name, int age) {
this.name = name;