image.png
Parcelable
Parcelable类的概述在SDK中是这样的:这些类的接口可以将实例写入或从中还原 Parcel
。
简单的说Parcelable是Android为我们提供的序列化的接口。
类似java的Serializable类。
序列化
由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。
反序列化
反序列化恰恰是序列化的反向操作,也就是说,把已存在在磁盘或者其他介质中的对象,反序列化(读取)到内存中,以便后续操作,而这个过程就叫做反序列化。
概括性来说序列化是指将对象实例的状态存储到存储媒体(磁盘或者其他介质)的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把数据流字节流写入。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
使用实例
进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。
代码语言:javascript复制package com.status.mattest;
import android.os.Parcel;
import android.os.Parcelable;
public class Book implements Parcelable {
private String name;
private int id;
private String classify;
protected Book(Parcel in) {
name = in.readString();
classify = in.readString();
id = in.readInt();
}
public Book(String classify, String name, int id) {
this.name = name;
this.id = id;
this.classify = classify;
}
/**
* 反序列化
*/
public static final Creator<Book> CREATOR = new Creator<Book>() {
@Override
public Book createFromParcel(Parcel in) {
return new Book(in);
}
@Override
public Book[] newArray(int size) {
return new Book[size];
}
};
@Override
public int describeContents() {
return 0;
}
/**
* 序列化过程
*
* @param dest
* @param flags
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(classify);
dest.writeInt(id);
}
@Override
public String toString() {
return "name : "
name """ "id : " id """ "classify" classify;
}
}