上一篇讲了基本的AIDL怎么使用
这里说一下Activity和Service之间的数据传递 ,数据传递有两个方向,Service向Activity中传递,Activity向Service中传递
Service向Activity中传递使用的方法就是我在上一篇中使用的getData方法,只要加个参数就可以直接使用了
而Activity向Service传递就比较麻烦了,例如我想传递一个Person类,那么首先建一个Person的实体类,并将其包裹化
public class Person implements Parcelable{ private String name,sex; public Person(String name, String sex) { this.name = name; this.sex = sex; } protected Person(Parcel in) { name = in.readString(); sex = in.readString(); } 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]; } }; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeString(name); parcel.writeString(sex); } }之后,在MyAIDL所在的aide包下建一个aide文件.名字也叫Person 在这里我们写的东西如下
// Person.aidl package com.example.dllo.cdemo; // Declare any non-default types here with import statements parcelable Person;这之后,我们在MyAIDL加入我们想要用的方法,
interface MyAIDL { void getData(); void addPerson(in Person p); List<Person> getList(); }然后AIDL中导包是没有提示的,我们需要自己写,整体如下
// MyAIDL.aidl package com.example.dllo.cdemo; import com.example.dllo.cdemo.Person; // Declare any non-default types here with import statements interface MyAIDL { void getData(); void addPerson(in Person p); List<Person> getList(); }这时AIDL文件就书写完了,我们需要在Build中选Make Project,如果报错首先看自己是否拼写错误,若发现有未找到类的错误,实体类可能你没建
这时在MyService中MyBinder多复写这两个方法
class MyBinder extends MyAIDL.Stub { @Override public void getData() throws RemoteException { Log.d("MyBinder", "我是服务里面的东东"); } @Override public void addPerson(Person p) throws RemoteException { list.add(p); } @Override public List<Person> getList() throws RemoteException { for (Person person : list) { Log.d("MyBinder", person.getName() + person.getSex()); } return list; } }list是一个Person类的集合
这时我们在MainActivity中继续调用这两个方法就可以实现两者之间的数据传递了(一个添加,一个获取)
myAIDL.addPerson(person); list = myAIDL.getList();