Parcelable

Paecelable

概述

Parcelable是Android中特有的序列化方式,它的实现比java的Serializable的实现较复杂一点:它需要重写describeContents和writeToParcel两个方法,以及Creator类型的CREATOR属性(其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。需要重写Creator接口中的两个方法:createFromParcel和newArray)

public class Album implements Parcelable {

    /**
     * 负责反序列化
     */
    private static final Creator<Album> CREATOR = new Creator<Album>() {
        /**
         * 从序列化对象中,获取原始的对象
         * @param source
         * @return
         */
        @Override
        public Album createFromParcel(Parcel source) {
            return new Album(source);
        }

        /**
         * 创建指定长度的原始对象数组
         * @param size
         * @return
         */
        @Override
        public Album[] newArray(int size) {
            return new Album[0];
        }
    };

    /**
     * 描述
     * 返回的是内容的描述信息
     * 只针对一些特殊的需要描述信息的对象,需要返回1,其他情况返回0就可以
     *
     * @return
     */
    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * 序列化
     *
     * @param dest
     * @param flags
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(mId);
        dest.writeString(mCoverPath);
        dest.writeString(mDisplayName);
        dest.writeLong(mCount);
    }
}

原理

Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,从而实现传递对象的功能。

对比

Serializable是Java的实现方式,可能会频繁的IO操作,反序列化通过反射实现,并且可能会产生较多的临时对象,所以消耗比较大,但是实现方式简单。

Parcelable是Android提供的方式,效率比较高,但是实现起来复杂一些。

二者的选取规则是:内存序列化上选择Parcelable, 存储到设备或者网络传输上选择Serializable(当然Parcelable也可以但是稍显复杂)

Serializable代码少,Parcelable代码多,实现略复杂
Serializable效率低,因为是通过流的形式进行传输的。Parcelable效率非常高,会将内容保存到内存中。
Serializable通过反射实现的,而Parcelable是通过自己实现的,效率会更高些。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值