Parcelable使用(一)
android有两种序列化方式:一是实现Serializable接口(是JavaSE本身就支持的),二是实现Parcelable接口(是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信(IPC))。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。
为什么要序列化?
1)保存对象的字节序列到本地文件中;
2)通过序列化对象在网络中传递对象;
3)通过序列化在进程间传递对象。
Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable ,所以Parcelable主要用于进程间通信,而网络传递数据使用比较复杂.Parcelable可用于Activity或Service之间传递数据.
public class MyParcelable implements Parcelable { protected MyParcelable(Parcel in) { } //必须实现的变量CREATOR public static final Creator<MyParcelable> CREATOR = new Creator<MyParcelable>() { @Override public MyParcelable createFromParcel(Parcel in) { return new MyParcelable(in); } @Override public MyParcelable[] newArray(int size) { return new MyParcelable[size]; } }; //必须实现的两个方法 @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) {//可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面 } }
上面是实现Parcelable的基本
public class Book implements Parcelable { private String bookName; private String author; private int publishDate; public Book() { } public Book(Parcel in)//实现带Parcel的构造方法,读取Parcel对象 { bookName = in.readString(); author = in.readString(); publishDate = in.readInt(); } //生成成员变量的getset方法 public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPublishDate() { return publishDate; } public void setPublishDate(int publishDate) { this.publishDate = publishDate; } @Override public int describeContents()//返回0或1 { return 0; } @Override public void writeToParcel(Parcel out, int flags)//将你的对象映射为Parcel对象,进行传递 { out.writeString(bookName); out.writeString(author); out.writeInt(publishDate); } public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() { @Override public Book[] newArray(int size) { return new Book[size]; } @Override public Book createFromParcel(Parcel in)//将Parcel对象映射为你的对象,传入Parcel进入Book构造方法 { return new Book(in); } }; }
以上是Parcelable接口的简单实现