网上有很多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