大家都知道在Android中通过AIDL可以跨进程调用Service中的数据,网上也有很多实例,但是大部分实例都是关于基本数据类型的远程调用,很少讲到复杂数据的调用,今天我用一个例子来演示一下怎样用AIDL Service 传递复杂数据。
我们分2步开始:
第一步:部署我们的服务端,也就是Service端:
1:在Service端我先自定义2个类型:Person和Pet。因为我们需要跨进程传递Person对象和Pet对象,所以Person类和Pet类都必须实现Parcelable接口,并要求在实现类中定义一个名为CREATER,类型为Parcelable.creator的静态Field。
代码如下:
1 package com.example.remoteservice; 2 3 import android.os.Parcel; 4 import android.os.Parcelable; 5 6 public class Person implements Parcelable { 7 int id; 8 String name; 9 String pass; 10 11 public Person() { 12 13 } 14 15 public Person(int id, String name, String pass) { 16 this.id = id; 17 this.name = name; 18 this.pass = pass; 19 } 20 21 @Override 22 public boolean equals(Object o) { 23 if (this == o) { 24 return true; 25 } 26 if (o == null) { 27 return false; 28 } 29 30 if (getClass() != o.getClass()) { 31 return false; 32 } 33 Person other = (Person) o; 34 35 if (name == null) { 36 if (other.name != null) { 37 return false; 38 } 39 } else if (!name.equals(other.name)) { 40 return false; 41 } 42 43 if (pass == null) { 44 if (other.pass != null) { 45 return false; 46 } 47 } else if (!pass.equals(other.pass)) { 48 return false; 49 } 50 51 return true; 52 } 53 54 @Override 55 public int hashCode() { 56 final int prime = 31; 57 int result = 1; 58 result = prime * result + (name == null ? 0 : name.hashCode()); 59 result = prime * result + (pass == null ? 0 : pass.hashCode()); 60 return result; 61 } 62 63 @Override 64 public int describeContents() { 65 66 return 0; 67 } 68 69 @Override 70 public void writeToParcel(Parcel arg0, int arg1) { 71 arg0.writeInt(id); 72 arg0.writeString(name); 73 arg0.writeString(pass); 74 } 75 76 public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() { 77 78 @Override 79 public Person createFromParcel(Parcel source) { 80 81 return new Person(source.readInt(), source.readString(), source.readString()); 82 } 83 84 @Override 85 public Person[] newArray(int size) { 86 87 return new Person[size]; 88 } 89 }; 90 91 public int getId() { 92 return id; 93 } 94 95 public void setId(int id) { 96 this