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接口的简单实现

原文地址:https://www.cnblogs.com/Ocean123123/p/10955495.html