14.1.3. 实现一个Parcel
14.1.3.实现一个Parcel
进程间传递的Message也是个Java对象,在传递与接收之间我们需要额外进行编码/解码——也就是序列化/反序列化。在Android中,可以序列化/反序列化的对象就被称作Parcel,作为Parcelable接口的实例。
作为Parcel,对象必须知道如何处理自身的编码/解码。
例 14.4. Message.java
package com.marakana.logservice;
import android.os.Parcel;
import android.os.Parcelable;
public class Message implements Parcelable { //
private String tag;
private String text;
public Message(Parcel in) { //
tag = in.readString();
text = in.readString();
}
public void writeToParcel(Parcel out, int flags) { //
out.writeString(tag);
out.writeString(text);
}
public int describeContents() { //
return 0;
}
public static final Parcelable.Creator<Message> CREATOR = new Parcelable.Creator<Message>() { //
public Message createFromParcel(Parcel source) {
return new Message(source);
}
public Message[] newArray(int size) {
return new Message[size];
}
};
// Setters and Getters
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
- 如前所说,Message类需实现Parcelable接口。
- 作为Parcelable接口的实现,类中必须相应地提供一个构造函数,使之可以根据Parcel重新构造原先的对象。在这里,我们将Parcel中的数据存入局部变量,注意其中的顺序很重要,必须与写入时的顺序保持一致。
- writeToParcel()方法对应于构造函数。它读取对象当前的状态,并写入Parcel。同上,变量的写入顺序必须与前面读取的顺序保持一致。
- 此方法留空。因为这个Parcel中没有别的特殊对象。
- 每个Parcelable对象必须提供一个Creator。这个Creator用于依据Parcel重新构造原先的对象,在此仅仅调用其它方法。
- 一些私有数据的getter/setter方法。
至此服务端的Java部分已告一段落,接下来将Service注册到Manifest文件。