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

  • 相关阅读:
    BAPI_TRANSACTION_COMMIT的使用方法(转)
    Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的解决办法
    在Windows XP环境中配置OPC服务器时的设置方式
    关于异常“The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine”的处理
    MSChart使用做折线图饼图(转)
    C#如何导入内文至SAP(转)
    经典Sql大全转
    工程师突击:SAP ABAP实用程序开发攻略(转)
    如何使用ExtJS Design中生成的代码
    ExtJS 4 学习(1)环境配置及注意点
  • 原文地址:https://www.cnblogs.com/Ocean123123/p/10955495.html
Copyright © 2011-2022 走看看