在上一篇中介绍了Andorid中的进程间的通信方式AIDL,本篇文章将介绍传递复杂数据的AIDL Service
下面通过一个示例说明:
本例子中用到了两个自定义类型:Person与Pet, 其中Person对象作为调用远程Service的参数,而Pet将作为返回值。就像RMI要求远程调用的参数和返回值必须实现Serializable接口,Android要求调用远程Service的参数和返回值都必须实现Parcelable接口。
实现Parcelable接口不仅要求实现该接口里定义的方法,还有两个要求:
1、要求在实现类中定义一个名为CREATOR、类型为Rarcelable.Creator的静态Field
2、要求使用AIDL代码来定义这些自定义类型。
实现Parcelable接口相当于Android提供的一种自定义序列化机制。Java序列化机制要求序列化类必须实现Serializable接口,而Android的序列化机制则要求自定义类必须实现Parcelable接口。
下面我们先来使用AIDL代码定义我们的自定义类型Person和Pet
Person.aidl
parcelable Person;
Pet.aidl
parcelable Pet;
可以看到,使用AIDL定义自定义类型只要一行代码
接下来我们来定义实现Parcelable接口的Persion类和Pet类
Person.java
import android.os.Parcel;
import android.os.Parcelable;
/**
*
* @author 大碗干拌
* @url http://blog.csdn.net/dawanganban
*/
public class Person implements Parcelable
{
private Integer id;
private String name;
private String pass;
public Person()
{
}
public Person(Integer id, String name, String pass)
{
super();
this.id = id;
this.name = name;
this.pass = pass;
}
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPass()
{
return pass;
}
public void setPass(String pass)
{
this.pass = pass;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((pass == null) ? 0 : pass.hashCode());
return res