前言
关于AIDL的原理以及详细介绍,我在Binder机制原理一文中有讲到,这里就不再赘述。本篇文章以实战为核心,写一个AIDL操作实例出来
AIDL与Messenger的区别就是AIDL支持并发处理请求,也就是多进程,多线程的情况。而Messenger是多进程,单线程
demo的github地址:https://github.com/LJHnb666666/AIDLDemo
1.实现思路
还是需要客户端,服务端Service。除此之外,还需要一个实体类做客户端和服务端交互的Bean,还需要AIDL文件定义操作的接口。
demo结构如图
2.具体步骤
①写实体类Book
这里需要注意,Book必须实现Parcelable
接口,标明其是可序列化的。
/**
* Created by didiwei on 2022/5/10
* desc: Book实体类
*/
public class Book implements Parcelable {
String name;//书名
int cost;//价钱
public Book(String name, int cost) {
this.name = name;
this.cost = cost;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", cost=" + cost +
'}';
}
//注意:以下均为Parcelable接口需要实现的方法
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(cost);
}
//这个方法我用编译器始终搞不出来,建议大家直接复制粘贴这里
public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() {
@Override
public B