zoukankan      html  css  js  c++  java
  • 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接口的简单实现

  • 相关阅读:
    HDU 4432 求因子+进制转换
    HDU 4438 概率 多个情况下的数学期望
    HDU 4424 并查集+贪心思想
    POJ 1611 记录节点数的并查集
    HDU 4430 二分查找
    HDU 4422 采蘑菇的小女孩
    最短路之SPFA模板
    zju pat1065. A+B and C (64bit)
    zju pat 1058 A+B in Hogwarts
    zju pat 1054 The Dominant Color
  • 原文地址:https://www.cnblogs.com/Ocean123123/p/10955495.html
Copyright © 2011-2022 走看看