第二章——Parcelable接口的使用(跨进程,Intent传输)
一、Parcelable类(Android独有的)
简介:Parcelable是一个接口。
作用:是Android提供的序列化接口,实现序列化和反序列化的操作。
二、跨进程使用
步骤一:创建Book类继承Parcelable接口
public class Book implements Parcelable { private String mBookName; private int mBookId; /** *准备:创建Book类,并继承Parcelable接口 */ public Book(int bookId, String bookName) { mBookId = bookId; mBookName = bookName; } @Override public String toString() { return mBookId+""+mBookName; } }
步骤二:会提示必须重写接口的方法
describeContents():返回当前对象的描素内容,如果含有文件描述符(什么叫文件描述符)则返回1,否则返回0,一般都返回0(所以不用考虑咯)。
writeToParcel(Parcel out,int flags):将对象写入序列化
Parcel out :系统提供的输出流,将成员变量存储到内存中。
int flags:0或1,1表示当前对象需要作为返回值保存(不明白),基本上所有情况都为0,(所以说可以不用考虑咯)
//接上面的代码 @Override public int describeContents() { return 0; }//描述文件,现在只要返回0就行 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mBookId); dest.writeString(mBookName); }//将当前对象写入序列化结构
步骤三:创建反序列化对象 Parcelable.Creator<T>接口:专门用于反序列化
重写该接口的方法:
createFromParcel(Parcel in):系统提供的输入流,从序列化的对象获取数据。
newArray(int size):创建该对象的数组 (暂时感觉没用)
注:反序列化的时候,要按照序列化放入数据的顺序获取数据,否则会收不着值。
//一定需要按照这种格式书写 public static final Parcelable.Creator<Book> CREATOR public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>(){ @Override public Book createFromParcel(Parcel source) { return new Book(source); }//获取输入流,反序列化对象 @Override public Book[] newArray(int size) { return new Book[0]; } }; //创建构造方法,实例化对象 private Book (Parcel in){ mBookId = in.readInt(); mBookName = in.readString(); }
3.原理
Parcelable利用Parcel out 将数据存储到内存中,然后通过Parcel in 从内存中获取数据。
三、Intent之间传递Parcelable类(就是各个Activity传递对象的方法)
根据上面创建Parcelable的方式,创建该类,然后应用Intent传输就可以了。