Parcelable,数据需要序列化推荐使用
1 这个接口供实体序列化使用,
2 在Intent中 传递数据和进程间通信都 可以使用此序列化
3 数据不能序列化到本地,速度比原生的Serializable快
Intent之间数据传递例子:
1 实体例子 (必须实现序列化和反序列化方法,并且两个方法中属性顺序要一样)
/** * Parcelable * 1 这个接口供实体序列化使用, * 2 在Intent中 传递数据和进程间通信都 可以使用此序列化 * 3 数据不能序列化到本地,速度比原生的Serializable快 * * @author root * */ public class Person implements Parcelable { private Integer id; private String name; @Override public int describeContents() { return 0; } /** * 注意: * 1 实现Parcelable.Creator接口,否则在获取Person数据的时候,会报错 * 2 实现Parcelable.Creator接口对象名必须为CREATOR,不如同样会报错 * 3 在读取Parcel容器里的数据,必须按writeToParcel中顺序读取, 不然会出现获取数据出错 * 4 名称:反序列化对象 */ public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { //从序列化的对象中 ,将数据还原,读取顺序与 “writeToParcel”写入顺序一致 public Person createFromParcel(Parcel source) { Person p1 = new Person(); p1.setId(source.readInt()); p1.setName(source.readString()); return p1 ; } public Person[] newArray(int size) { return new Person[size]; } }; /** * 将对象打包(序列化)到提供的Parcel中 * 顺序要与CREATER中一样 * 名称:序列化对象 */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt( id ); dest.writeString(name ); } 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; } }
2 Intent之间传递
第一个Activity中 Person p = new Person(); p.setId(1); p.setName("xiaoming"); //传递序列化后的对象 intent.putExtra("Person", p); 第二个Activity中取出数据 Person person = intent.getParcelableExtra("Person"); System.out.println( person.getId()+" = "+person.getName());