标签:android
什么是Parcelable ?
Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口。一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。
Parcelable 传递对象
Android序列化对象主要有两种方法:
1.实现Serializable接口,实现Serializable接口是JavaSE本身就支持的;
2.实现Parcelable接口,Parcelable是Android特有的功能,效率比实现Serializable接口高,像用于Intent数据传递也都支持,而且还可以用在进程间通信(IPC),
除了基本类型外,只有实现了Parcelable接口的类才能被放入Parcel中。
Parcelable接口定义
-
public interface Parcelable {
-
-
public int describeContents();
-
-
public void writeToParcel(Parcel dest, int flags);
-
-
-
public interface Creator<T> {
-
public T createFromParcel(Parcel source);
-
public T[] newArray(int size);
-
}
实现Parcelable接口?
从parcelable接口定义中,我们可以看到,实现parcelable接口,需要我们实现下面几个方法:
1.describeContents方法。内容接口描述,默认返回0就可以;
2.writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.即打包需要传递的数据到Parcel容器保存,以便从parcel容器获取数据,该方法声明如下:
writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc
3.静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。方法是供外部类反序列化本类数组使用。
代码实现
1.封装数据,把实现parcelable接口的Person对象传递到TwoActivity里;
-
public class DemoActivity extends Activity {
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
-
Person p = new Person();
-
p.setId(1);
-
p.setName("xiaoming");
-
-
Intent i = new Intent(this, TwoActivity.class);
-
i.putExtra("Person", p);
-
startActivity(i);
-
}
-
}
2.TwoActivity获取数据,从DemoActivity传递的Person对象给解析,并打印;
-
public class TwoActivity extends Activity {
-
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
-
super.onCreate(savedInstanceState);
-
-
Person p = (Person)getIntent().getParcelableExtra("Person");
-
-
System.out.println("p_id"+p.getId());
-
System.out.println("p_name"+p.getName());
-
}
-
}
3.parcelable接口的实现
-
public class Person implements Parcelable{
-
-
-
private int id;
-
private String name;
-
-
-
-
-
-
-
-
-
public static final Parcelable.Creator<Person> CREATOR = new Creator(){
-
-
@Override
-
public Person createFromParcel(Parcel source) {
-
-
-
Person p = new Person();
-
p.setId(source.readInt());
-
p.setName(source.readString());
-
return p;
-
}
-
-
@Override
-
public Person[] newArray(int size) {
-
-
return new Person[size];
-
}
-
};
-
-
public int getId() {
-
return id;
-
}
-
-
public void setId(int id) {
-
this.id = id;
-
}
-
-
public String getName() {
-
return name;
-
}
-
-
public void setName(String name) {
-
this.name = name;
-
}
-
-
@Override
-
public int describeContents() {
-
-
return 0;
-
}
-
-
@Override
-
public void writeToParcel(Parcel dest, int flags) {
-
-
-
-
dest.writeInt(id);
-
dest.writeString(name);
-
}
-
}
Android 序列化对象接口Parcelable使用方法
标签:android
原文地址:http://blog.csdn.net/zpf8861/article/details/41862407