网上有很多AIDL的使用教程,但大都描述不清晰,或者仅仅说明了单向通讯的,没有很好的达到数据交
互传输的效果,也没有很好的将2个进程的程序工程独立开给同学说明方便学习和演练。因此我整理出以
下说明,供广大同学们学习及交流,作为AIDL通讯的一个入门。
首先创建工程“aidltest”和“checkaidl”,作为两个程序,到时生成2个apk,他们之间通过AIDL方式
进行数据交互。
先讲第一个工程 “aidltest”
工程结构如下图:
具体步骤如下:
1.Person 类需要实现接口Parcelable
public class Person implements Parcelable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
protected Person(Parcel in) {
name = in.readString();
age = in.readInt();
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
}
2.创建aidl文件,注意aidl文件夹与java是平级关系,在main之内
Person.aidl的包名需要与Person.java一致
// Person.aidl package hk.newsoft.aidltest.bean; parcelable Person;
3.创建IMyAidl.aidl文件,并在其中定义好接口方法
// IMyAidl.aidl
package hk.newsoft.aidltest;
import hk.newsoft.aidltest.bean.Person;
// Declare any non-default types here with import statements
interface IMyAidl {
/**
* 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);
void addPerson(in Person person);
Person getPerson();
}
4.需要Clean一下,将aidl文件生成java文件
5.创建Service用于绑定数据 “MyAidlService”
public class MyAidlService extends Service {
private Person mPersons=null;
private IBinder iBinder = new IMyAidl.Stub() {
@Override
public void addPerson(Person person) throws RemoteException {
mPersons=person;
}
@Override
public Person getPerson() throws RemoteException {
return mPersons;
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
}
6.在Activity文件中操作具体的业务逻辑,绑定Service并进行数据的交互
7.注意AndroidManifest.xml的配置
<service
android:name="hk.newsoft.aidltest.service.MyAidlService"
android:enabled="true"
android:exported="true"
android:process=":aidl">
<intent-filter>
<action android:name="hk.newsoft.aidltest.aidl" />
</intent-filter>
</service>
此时运行“aidltest”工程,apk打开就可以产生数据源
再将第二个工程“checkaidl”,它用于获取工程一产生的数据,并对数据做相应的修改,把数据返给工
程一
工程结构如下图:
1.Person.aidl IMyAidl.aidl Person.java是从工程一种复制过来,且保持包名一致
2.clean一下,将aidl文件生成java文件
3.在Activity中开启Service,并进行数据的读取、修改和交互
工程一代码:https://download.csdn.net/download/huashanjuji/10675948
工程二代码:https://download.csdn.net/download/huashanjuji/10675970